文章目录
- directRabbitmq
-
- 1、通过spring实现direct(直连)
- 2、发送消息
- 3、监听队列
参考文章链接
directRabbitmq
1、通过spring实现direct(直连)
配置文件,创建队列和交换机以及配置路由
@Configuration
public class DirectRabbitConfig {
//队列 起名:TestDirectQueue
@Bean("testDirectQueue1")
public Queue testDirectQueue() {
// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般设置一下队列的持久化就好,其余两个就是默认false
return new Queue("testDirectQueue1");
}
//队列 起名:TestDirectQueue2
@Bean("testDirectQueue2")
public Queue testDirectQueue2() {
// durable:是否持久化,默认是false,持久化队列:会被存储在磁盘上,当消息代理重启时仍然存在,暂存队列:当前连接有效
// exclusive:默认也是false,只能被当前创建的连接使用,而且当连接关闭后队列即被删除。此参考优先级高于durable
// autoDelete:是否自动删除,当没有生产者或者消费者使用此队列,该队列会自动删除。
// return new Queue("TestDirectQueue",true,true,false);
//一般设置一下队列的持久化就好,其余两个就是默认false
return new Queue("testDirectQueue2");
}
//Direct交换机 起名:TestDirectExchange
@Bean("testDirectExchange")
DirectExchange testDirectExchange() {
// return new DirectExchange("TestDirectExchange",true,true);
return new DirectExchange("testDirectExchange",false,false);
}
//将队列1绑定路由1
//绑定 将队列和交换机绑定, 并设置用于匹配键:TestDirectRouting
@Bean("testDirectRouting1")
Binding bindingDirect1() {
return BindingBuilder.bind(testDirectQueue()).to(testDirectExchange()).with("testDirectRouting1");
}
//将队列1绑定路由2
@Bean("testDirectRouting2")
Binding bindingDirect2() {
return BindingBuilder.bind(testDirectQueue()).to(testDirectExchange()).with("testDirectRouting2");
}
//将队列2绑定路由1
@Bean("testDirectRouting3")
Binding bindingDirect() {
return BindingBuilder.bind(testDirectQueue2()).to(testDirectExchange()).with("testDirectRouting1");
}
}
2、发送消息
@RestController
public class DirectRabbitController {
@Autowired
RabbitTemplate rabbitTemplate;
@GetMapping("/sendMessage1")
public String getMsg1(){
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: M A N ";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String, Object> manMap = new HashMap<>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("testDirectExchange", "testDirectRouting1", manMap);
return "发送路由1成功";
}
@GetMapping("/sendMessage2")
public String getMsg2(){
String messageId = String.valueOf(UUID.randomUUID());
String messageData = "message: M A N ";
String createTime = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
Map<String, Object> manMap = new HashMap<>();
manMap.put("messageId", messageId);
manMap.put("messageData", messageData);
manMap.put("createTime", createTime);
rabbitTemplate.convertAndSend("testDirectExchange", "testDirectRouting2", manMap);
return "发送路由2成功";
}
}
3、监听队列
@Component
public class DirectReceiver2 {
//监听
@RabbitListener(queues = "testDirectQueue2")
@RabbitHandler
public void process(Message testMessage) {
System.out.println("DirectReceiver2消费者收到消息 : " + testMessage.toString());
}
}