天天看點

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