【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】
现在我们已经把RabbitMQ 装上了
之前我们做ActiveMQ 的时候
默认是p2p 模型


而在AMQP 中

【导入坐标】
org.springframework.boot spring-boot-starter-amqp
按照协议名导入的

【配置】
rabbitmq:host: localhostport: 5672

【实现】


先把之前做的 ActiveMQ 实现的注掉
【配置类】
package com.dingjiaxiong.service.impl.rabbitmq.direct.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** ClassName: RabbitConfigDirect* date: 2022/10/22 21:29** @author DingJiaxiong*/@Configuration
public class RabbitConfigDirect {//存储消息的消息队列的对象@Beanpublic Queue directQueue(){return new Queue("direct_queue"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】}//还可以再来个队列,让它绑在同一个交换机上@Beanpublic Queue directQueue2(){return new Queue("direct_queue2"); //是否持久化、是否连接专用、是否自动删除【后面其实有三个boolean参数,默认值是tff】}//消息队列不能直接使用,需要使用一个交换机去绑定它@Beanpublic DirectExchange directExchange(){return new DirectExchange("directExchange");}//做消息队列与交换机的绑定关系@Beanpublic Binding bindingDirect(){return BindingBuilder.bind(directQueue()).to(directExchange()).with("direct");}//做消息队列与交换机的绑定关系@Beanpublic Binding bindingDirect2(){return BindingBuilder.bind(directQueue2()).to(directExchange()).with("direct2");}}
实现类
package com.dingjiaxiong.service.impl.rabbitmq.direct;import com.dingjiaxiong.service.MessageService;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;/*** ClassName: MessageServiceRabbitmqDirectImpl* date: 2022/10/22 21:25** @author DingJiaxiong*/@Service
public class MessageServiceRabbitmqDirectImpl implements MessageService {@Autowiredprivate AmqpTemplate amqpTemplate;@Overridepublic void sendMessage(String id) {System.out.println("待发送短信的订单已纳入处理队列(rabbitmq direct),id " + id);amqpTemplate.convertAndSend("directExchange","direct",id);}@Overridepublic String doMessage() {return null;}
}
做一个自动监听
package com.dingjiaxiong.service.impl.rabbitmq.direct;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** ClassName: MessageListener* date: 2022/10/22 21:40** @author DingJiaxiong*/@Component
public class MessageListener {//收一个消息@RabbitListener(queues = "direct_queue")public void receive(String id){System.out.println("已完成短信发送业务(rabbitmq direct),id:" + id);}}
有了这个监听就不用去手动消费了
OK, 直接开启服务器测试
生产一个

这个就是listener 自动处理的
看看控制台

可以看到已经有两个消息队列了
来自我们初始化时,配置类中

这两个东西
稍微修改一下
把监听类放到一个包里

将其复制一个2
package com.dingjiaxiong.service.impl.rabbitmq.direct.listener;import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** ClassName: MessageListener* date: 2022/10/22 21:40** @author DingJiaxiong*/@Component
public class MessageListener2 {//收一个消息@RabbitListener(queues = "direct_queue")public void receive(String id){System.out.println("已完成短信发送业务(rabbitmq direct two),id:" + id);}}
现在就有两个监听, 而且都监听的是同一个队列
直接启动看看效果

我一共发了四次
可以看到它俩是轮流着在对消息进行处理
就是这样,回顾一下








上一篇:描写声音abcd式的词语大全
下一篇:点字怎么组词