您好,登錄后才能下訂單哦!
這篇文章主要講解了“RabbitMQ主題模式怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“RabbitMQ主題模式怎么實現”吧!
生產者聲明了三個隊列和一個主題切換。隊列分別與主題交換機綁定,并設置了路由鍵統一字符。如果路由鍵滿足交換機和隊列之間的通配符要求,則將消息存儲在隊列中
#通配符可以匹配一個或多個單詞,*通配符可以匹配一個單詞;如果Exchange和隊列之間的routing key通配符是#hello.#,則表示中間所有帶hello的routing key都滿足條件,消息會被存入隊列
導入 com.example.rabbitmq.constant.RabbitConstant; 導入 org.springframework.amqp.core.Binding; 導入 org.springframework.amqp.core.BindingBuilder; 導入 org.springframework.amqp.core.Queue; 導入 org.springframework.amqp.core.TopicExchange; 導入 org.springframework.context.annotation.Bean; 導入 org.springframework.context.annotation.Configuration;@Configuration public class RabbitTopicProvider { @Bean public Queue topicFirstQueue() { return new Queue(RabbitConstant.TOPICS_FIRST_QUEUE_NAME); } @Bean 公共隊列 topicSecondQueue() { return new Queue(RabbitConstant.TOPICS_SECOND_QUEUE_NAME); } @Bean 公共隊列 topicThirdQueue() { return new Queue(RabbitConstant.TOPICS_THIRD_QUEUE_NAME); } @Bean public TopicExchange topicExchange() { // 創建一個主題類型切換,表示交換機會發送消息到 routing_key 通配符匹配隊列成功 return new TopicExchange(RabbitConstant.TOPICS_EXCHANGE_NAME); } @Bean public Binding topicFirstQueueBindExchange() { // 綁定topic類型切換到隊列1并設置routing_key通配符#first.# return BindingBuilder.bind(topicFirstQueue()).to(topicExchange()).with(RabbitConstant.TOPICS_ROUTING_KEY_FIRST_WILDCARD); } @Bean public Binding topicSecondQueueBindExchange() { //第二個隊列綁定主題類型切換,設置路由_key通配符為* second.# return BindingBuilder.bind(topicSecondQueue()).to(topicExchange()) .with(RabbitConstant.TOPICS_ROUTING_KEY_SECOND_WILDCARD); } @Bean public Binding topicThirdQueueBindExchange() { // 三個隊列綁定主題切換,設置routing_key通配符為*third.* return BindingBuilder.bind(topicThirdQueue()).to(topicExchange()).with(RabbitConstant.TOPICS_ROUTING_KEY_THRID_WILDCARD); } }
消費者監聽隊列并消費
導入 com.example.rabbitmq.constant.RabbitConstant; 導入 org.springframework.amqp.rabbit.annotation.RabbitHandler; 導入 org.springframework.amqp.rabbit.annotation.RabbitListener; 導入 org.springframework.stereotype.Component; @Component public class RabbitTopicsConsumer { @RabbitListener(queues = RabbitConstant.TOPICS_FIRST_QUEUE_NAME) @RabbitHandler public void topicFirstQueue(String context) { System.out.println("rabbit topics queue first receiver:" + context); } @RabbitListener(queues = RabbitConstant.TOPICS_SECOND_QUEUE_NAME) @RabbitHandler public void topicSecondQueue(String context) { System.out.println("兔子主題隊列第二個接收者:" + context); } @RabbitListener(queues = RabbitConstant.TOPICS_THIRD_QUEUE_NAME) @RabbitHandler public void topicThirdQueue(String context) { System.out.println("rabbit 主題隊列第三個接收者:" + context); } }
單元測試
@Test public void topics() { // 向第一個隊列發送消息。這時候隊列可以接收到消息,因為隊列的通配符是#first.#,而routing_key是topics first。路由。鍵,匹配成功 rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_FIRST_QUEUE_ROUTING_KEY, "topics hello"); // 向第二個隊列發送消息。這時候隊列也能收到消息了,因為隊列的通配符是*秒#,而routing_key是topic秒。路由。鍵,匹配成功 rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_SECOND_QUEUE_ROUTING_KEY, "topics hello"); // 向第三個隊列發送消息。此時隊列無法接受消息,因為隊列通配符是*第三個*,而routing_key是topics第三個。路由。鍵,匹配失敗 rabbitTemplate.convertAndSend(RabbitConstant.TOPICS_EXCHANGE_NAME, RabbitConstant.TOPICS_THIRD_QUEUE_ROUTING_KEY, "topics hello"); }
響應結果
感謝各位的閱讀,以上就是“RabbitMQ主題模式怎么實現”的內容了,經過本文的學習后,相信大家對RabbitMQ主題模式怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。