irpas技术客

【SpringBoot学习11】springboot整合rabbitMQ_ぃ小男孩つ_springboot 整合rabbitmq

网络 748

文章目录 1. 相关软件安装1.1 Erlang安装1.2 rabbitMQ安装 2. 整合rabbitMQ中的direct模型2.1 导入相关坐标2.2 添加核心配置2.3 初始化直连模式系统设置2.4 使用AmqpTemplate操作RabbitMQ2.5 设置消息监听器 3. 整合rabbitMQ中的Topic模型3.1 初始化主题模式系统设置3.2 使用AmqpTemplate操作RabbitMQ3.3 设置消息监听器 4. 总结

1. 相关软件安装

RabbitMQ是MQ产品中的目前较为流行的产品之一,它遵从AMQP协议。RabbitMQ的底层实现语言使用的是Erlang,所以安装RabbitMQ需要先安装Erlang。

1.1 Erlang安装

windows版安装包下载地址:https😕/·/install-windows.html 下载安装后得到以下目录 运行sbin目录下的rabbitmq-service.bat命令即可,start参数表示启动,stop参数表示退出,默认对外服务端口5672。

rabbitmq-service.bat start # 启动服务 rabbitmq-service.bat stop # 停止服务 rabbitmqctl status # 查看服务状态

? 注意:启动rabbitmq的过程实际上是开启rabbitmq对应的系统服务,需要管理员权限方可执行。即我们需要使用管理员身份打开命令提示符,或者打开任务管理器,手动启动 访问web管理服务

? RabbitMQ也提供有web控制台服务,但是此功能是一个插件,需要先启用才可以使用。

rabbitmq-plugins.bat enable rabbitmq_management # 启动rabbitmq_management插件

启动插件后可以在插件运行状态中查看是否运行,运行后通过浏览器即可打开服务后台管理界面

http://localhost:15672

输入用户名密码,均为guest 至此,我们相关软件安装已经准备完毕,接下来我们就来使用rabbitMQ这个消息中间件。

2. 整合rabbitMQ中的direct模型 2.1 导入相关坐标

导入springboot整合amqp的starter,amqp协议默认实现为rabbitmq方案

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 2.2 添加核心配置 spring: rabbitmq: host: localhost port: 5672 2.3 初始化直连模式系统设置

由于RabbitMQ不同模型要使用不同的交换机,因此需要先初始化RabbitMQ相关的对象,例如队列,交换机等

队列Queue与直连交换机DirectExchange创建后,还需要绑定他们之间的关系Binding,这样就可以通过交换机操作对应队列。

@Configuration public class RabbitConfigDirect { @Bean public Queue directQueue(){ return new Queue("direct_queue"); } @Bean public Queue directQueue2(){ return new Queue("direct_queue"); } @Bean public DirectExchange directExchange(){ return new DirectExchange("directExchange"); } //绑定队列与交换机 @Bean public Binding bindingDirect(){ return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct"); } @Bean public Binding bindingDirect2(){ return BindingBuilder.bind(directQueue2()).to(directExchange()).with("direct2"); } } 2.4 使用AmqpTemplate操作RabbitMQ @Service public class MsgServiceRabbitmqDirectImpl implements MsgService { @Autowired private AmqpTemplate amqpTemplate; @Override public void sendMsg(String id) { System.out.println("已将待处理消息加入队列,id :"+id); //参数1:交换机名称,2:绑定队列与交换机的名称,3:传递的参数 amqpTemplate.convertAndSend("directExchange","direct",id); } } 2.5 设置消息监听器

使用消息监听器在服务器启动后,监听指定位置,当消息出现后,立即消费消息。

使用注解@RabbitListener定义当前方法监听RabbitMQ中指定名称的消息队列。

这里我绑定了两个队列,rabbitMQ会轮流使用两个消息队列,我们运行看一下结果。

@Component public class MsgListener { @RabbitListener(queues = "direct_queue") public void receive(String id){ System.out.println("已完成短信发送业务(rabbitmq)" + id); } } @Component public class MsgListener2 { @RabbitListener(queues = "direct_queue") public void receive(String id){ System.out.println("已完成短信发送业务(rabbitmq2)" + id); System.out.println(); } }

ok,总结一下,首先使用rabbitMQ消息中间件可以使用监听技术来实现消息自动发送。其次,使用交换机绑定多个队列,队列会轮流使用。

3. 整合rabbitMQ中的Topic模型

整合rabbitMQ中的Topic模型的第一步和第二步跟整合direct模型一样,这里省略。

3.1 初始化主题模式系统设置

主题模式支持routingKey匹配模式,*表示匹配一个单词,#表示匹配任意内容,这样就可以通过主题交换机将消息分发到不同的队列中

@Configuration public class RabbitConfigTopic { @Bean public Queue topicQueue(){ return new Queue("topic_queue"); } @Bean public Queue topicQueue2(){ return new Queue("topic_queue2"); } @Bean public TopicExchange topicExchange(){ return new TopicExchange("topicExchange"); } //绑定队列与交换机 @Bean public Binding bindingtopic(){ //return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.order.id"); return BindingBuilder.bind(topicQueue()).to(topicExchange()).with("topic.*.id"); } @Bean public Binding bindingtopic2(){ return BindingBuilder.bind(topicQueue2()).to(topicExchange()).with("topic.order.*"); } }

3.2 使用AmqpTemplate操作RabbitMQ

发送消息后,根据当前提供的routingKey与绑定交换机时设定的routingKey进行匹配,规则匹配成功消息才会进入到对应的队列中。

@Service public class MsgServiceRabbitmqTopicImpl implements MsgService { @Autowired private AmqpTemplate amqpTemplate; @Override public void sendMsg(String id) { System.out.println("已将待处理消息加入队列,id :"+id); //参数1:交换机名称,2:绑定队列与交换机的名称,3:传递的参数 amqpTemplate.convertAndSend("topicExchange","topic.order.id",id); } } 3.3 设置消息监听器

使用注解@RabbitListener定义当前方法监听RabbitMQ中指定名称的消息队列。

@Component public class MsgListener { @RabbitListener(queues = "topic_queue") public void receive(String id){ System.out.println("已完成短信发送业务(rabbitmq111)" + id); } @RabbitListener(queues = "topic_queue2") public void receive2(String id){ System.out.println("已完成短信发送业务(rabbitmq222)" + id); } }

接下来我们运行程序看结果。

可以看出,两种绑定方法都能将当前提供的routingKey与绑定交换机时设定的routingKey进行匹配。

忘记给你们看一下rabbitMQ中的队列。下图是两次运行结果后产生的队列。

4. 总结 springboot整合RabbitMQ提供了AmqpTemplate对象作为客户端操作消息队列操作ActiveMQ需要配置ActiveMQ服务器地址,默认端口5672企业开发时通常使用监听器来处理消息队列中的消息,设置监听器使用注解@RabbitListenerRabbitMQ有5种消息模型,使用的队列相同,但是交换机不同。交换机不同,对应的消息进入的策略也不同

?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #springboot #整合RabbitMQ #文章目录1 #相关软件安装11 #Erlang安装12 #rabbitMQ安装2 #导入相关坐标22