十六、RabbitMQ快速入门

news/2024/12/6 20:06:14/

目录

一、在centos上下载MQ镜像

二、安装运行容器

三、登录进入MQ

1、添加一个新的用户

2、新建虚拟机

3、 为用户分配权限

四、RabbitMQ的基本概念

RabbitMQ中的几个概念:

五、常见消息模型

六、简单的消息生产与消费

1、消费者类

2、生产者类

3、基本消息队列的消息发送流程:

4、基本消息队列的消息接收流程:


一、在centos上下载MQ镜像

docker pull rabbitmq:3-management

二、安装运行容器

docker run \-e RABBITMQ_DEFAULT_USER=itcast \-e RABBITMQ_DEFAULT_PASS=123456 \--name mq \--hostname mq1 \-p 15672:15672 \-p 5672:5672 \-d \rabbitmq:3-management

三、登录进入MQ

1、添加一个新的用户

2、新建虚拟机

3、 为用户分配权限

四、RabbitMQ的基本概念

  • Publisher是消息的发送者,负责将消息发送到交换机;
  • 交换机负责路由,将消息暂存到消息队列;
  • 队列负责暂存消息;
  • 消费者从队列获取消息,然后处理消息;
  • 每个虚拟主机相互之间是隐藏的,避免干扰;

RabbitMQ中的几个概念:

  1. channel:操作MQ的工具;
  2. exchange:路由消息到队列中;
  3. queue:缓存消息;
  4. virtual host:虚拟主机,是对queue、exchange等资源的逻辑分组;
     

五、常见消息模型

六、简单的消息生产与消费

1、消费者类

package cn.itcast.mq.helloworld;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class ConsumerTest {public static void main(String[] args) throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory = new ConnectionFactory();// 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码factory.setHost("192.168.248.152");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("itcast");factory.setPassword("123456");// 1.2.建立连接Connection connection = factory.newConnection();// 2.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.订阅消息channel.basicConsume(queueName, true, new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {// 5.处理消息String message = new String(body);System.out.println("接收到消息:【" + message + "】");}});System.out.println("等待接收消息。。。。");}
}

2、生产者类

package cn.itcast.mq.helloworld;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class ConsumerTest {public static void main(String[] args) throws IOException, TimeoutException {// 1.建立连接ConnectionFactory factory = new ConnectionFactory();// 1.1.设置连接参数,分别是:主机名、端口号、vhost、用户名、密码factory.setHost("192.168.248.152");factory.setPort(5672);factory.setVirtualHost("/");factory.setUsername("itcast");factory.setPassword("123456");// 1.2.建立连接Connection connection = factory.newConnection();// 2.创建通道ChannelChannel channel = connection.createChannel();// 3.创建队列String queueName = "simple.queue";channel.queueDeclare(queueName, false, false, false, null);// 4.订阅消息channel.basicConsume(queueName, true, new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope,AMQP.BasicProperties properties, byte[] body) throws IOException {// 5.处理消息String message = new String(body);System.out.println("接收到消息:【" + message + "】");}});System.out.println("等待接收消息。。。。");}
}

3、基本消息队列的消息发送流程:

  1. 建立connection
  2. 创建channel
  3. 利用channel声明队列
  4. 利用channel向队列发送消息

4、基本消息队列的消息接收流程:

  1. 建立connection
  2. 创建channel
  3. 利用channel声明队列
  4. 定义consumer的消费行为handleDelivery()
  5. 利用channel将消费者与队列绑定
     

注意:

都有创建队列的原因是因为避免队列不存在;


http://www.ppmy.cn/news/1231053.html

相关文章

怎么实现在微信公众号秒杀商品的功能呢

实现微信公众号秒杀商品的功能,需要结合微信公众平台和后端开发技术。下面将介绍整个实现过程,包括前期准备、开发流程和后期运营等方面。 一、前期准备 确定秒杀商品:选择适合秒杀的商品,要求数量充足、质量良好,同时…

适合学校或高校老师、学生学习用的网盘推荐

现代教育中,数字化的教学资源和家长的参与度越来越重要。然而文件传输的问题一直是学校和家长面临的一个挑战,网络限制、U盘病毒和文件管理不便等问题,都对教学质量和家校沟通造成了影响。Zoho WorkDrive企业网盘为学校还有教辅机构提供了一个…

科技云报道:全球勒索攻击创历史新高,如何建立网络安全的防线?

科技云报道原创。 最简单的方式,往往是最有效的,勒索软件攻击就属于这类。 近两年,随着人类社会加速向数字世界进化,勒索软件攻击成为网络安全最为严重的威胁之一。今年以来,勒索软件攻击在全球范围内呈现快速上升态…

spring boot @Autowired 注入的服务为null

spring boot Autowired 注入的服务为null 技术博客 http://idea.coderyj.com/ 1.今天调试代码发现 Autowired 注入的服务都是null 经过排查发现 是函数的权限不够,应该把private改成 public解决问题 修改前 PostMapping("handelAllCharge") private JsonUtil hande…

Java设计原则和设计模式

目录 第一部分:设计原则 单一职责原则 (Single Responsibility Principle)开闭原则 (Open-Closed Principle)里氏替换原则 (Liskov Substitution Principle)接口隔离原则 (Interface Segregation Principle)依赖倒置原则 (Dependency Inversion Principle)合成/聚…

Java中,ArrayList和LinkedList区别区分,简洁

在Java中,ArrayList和LinkedList都是用来存储和管理数据的类 ArrayList是Java中的一个类,它实现了List接口,是一种基于动态数组实现的集合类常用成员方法: 构造方法:ArrayList() 成员方法:add、remov…

MyBatis框架——Mybatis操作数据库之简单的insert操作的实现

入门_MyBatis中文网https://mybatis.net.cn/getting-started.html一些配置文件的模板可以从mybatis的官网中找到。 一、MyBatis操作数据库步骤 1、读取MyBatis配置文件mybatis-config.xml。 mybatis-config.xml作为mybatis的全局配置文件,配置MyBatis的运行环境等…

17.Oracle11g的PL/SQL基础

Oracle11g的PL/SQL基础 一、PL/SQL的体系1、什么是PL/SQL2、PL/SQL 的优缺点2.1 PL/SQL的优点2.2 PL/SQL的缺点 二、PL/SQL的语法1、PL/SQL代码结构(块)2、PL/SQL基本语法2.1 变量声明2.2 流程控制语法 三、oracle的动态SQL 一、PL/SQL的体系 1、什么是P…