天天看点

Spring+directRabbitmqdirectRabbitmq

文章目录

  • 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());
    }
}