最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot整合RabbitMQ實(shí)例(Topic模式)

 更新時(shí)間:2017年04月26日 11:53:51   作者:牛頭人  
Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來通過本文給大家分享Spring Boot整合RabbitMQ實(shí)例(Topic模式),需要的朋友參考下吧

1.Topic交換器介紹

Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。 在這種交換機(jī)下,隊(duì)列和交換機(jī)的綁定會(huì)定義一種路由模式,那么,通配符就要在這種路由模式和路由鍵之間匹配后交換機(jī)才能轉(zhuǎn)發(fā)消息。

在這種交換機(jī)模式下:

    路由鍵必須是一串字符,用句號(hào)(.) 隔開,比如說 agreements.us,或者 agreements.eu.stockholm 等。

    路由模式必須包含一個(gè) 星號(hào)(*),主要用于匹配路由鍵指定位置的一個(gè)單詞,比如說,一個(gè)路由模式是這樣子:agreements..b.*,那么就只能匹配路由鍵是這樣子的:第一個(gè)單詞是 agreements,第四個(gè)單詞是 b。 井號(hào)(#)就表示相當(dāng)于一個(gè)或者多個(gè)單詞,例如一個(gè)匹配模式是agreements.eu.berlin.#,那么,以agreements.eu.berlin開頭的路由鍵都是可以的。
具體代碼發(fā)送的時(shí)候還是一樣,第一個(gè)參數(shù)表示交換機(jī),第二個(gè)參數(shù)表示routing key,第三個(gè)參數(shù)即消息。如下:

rabbitTemplate.convertAndSend("testTopicExchange","key1.a.c.key2", " this is  RabbitMQ!");

topic 和 direct 類似, 只是匹配上支持了"模式", 在"點(diǎn)分"的 routing_key 形式中, 可以使用兩個(gè)通配符:

*表示一個(gè)詞.

#表示零個(gè)或多個(gè)詞.

如上圖所示:此類交換器使得來自不同的源頭的消息可以到達(dá)一個(gè)對(duì)列,其實(shí)說的更明白一點(diǎn)就是模糊匹配的意思,例如:上圖中紅色對(duì)列的routekey為usa.#,#代表匹配任意字符,但是要想消息能到達(dá)此對(duì)列,usa.必須匹配后面的#好可以隨意。圖中usa.news,usa.weather都能找到紅色隊(duì)列,符號(hào)“#”匹配一個(gè)或多個(gè)詞,符號(hào)“”匹配不多不少一個(gè)詞。因此“usa.#”能夠匹配到“usa.news.XXX”,但是“usa.” 只會(huì)匹配到“usa.XXX”。
注:交換器說到底是一個(gè)名稱與隊(duì)列綁定的列表。當(dāng)消息發(fā)布到交換器時(shí),實(shí)際上是由你所連接的信道,將消息路由鍵同交換器上綁定的列表進(jìn)行比較,最后路由消息

2.示例代碼

1).RabbitMQ的Topic的bean配置

RabbitTopic.java類:

package com.example.rabbitmqtopic;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitTopic {
 final static String message = "topic.message";
 final static String messages = "topic.messages";
 //創(chuàng)建隊(duì)列
 @Bean
 public Queue queueMessage() {
  return new Queue(RabbitTopic.message);
 }
 //創(chuàng)建隊(duì)列
 @Bean
 public Queue queueMessages() {
  return new Queue(RabbitTopic.messages);
 }
 //創(chuàng)建交換器
 @Bean
 TopicExchange exchange() {
  return new TopicExchange("topicExchange");
 }
  //對(duì)列綁定并關(guān)聯(lián)到ROUTINGKEY
 @Bean
 Binding bindingExchangeMessage(Queue queueMessage, TopicExchange exchange) {
  return BindingBuilder.bind(queueMessage).to(exchange).with("topic.message");
 }
 //對(duì)列綁定并關(guān)聯(lián)到ROUTINGKEY
 @Bean
 Binding bindingExchangeMessages(Queue queueMessages, TopicExchange exchange) {
  return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");//*表示一個(gè)詞,#表示零個(gè)或多個(gè)詞
  }
}

2).消息生產(chǎn)者生產(chǎn)消息

TopicSender.java類:

package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class TopicSender {
 @Autowired
 private AmqpTemplate rabbitTemplate;
 public void send() {
  String context = "hi, i am message all";
  System.out.println("Sender : " + context);
  this.rabbitTemplate.convertAndSend("topicExchange", "topic.1", context);
 }
 public void send1() {
  String context = "hi, i am message 1";
  System.out.println("Sender : " + context);
  this.rabbitTemplate.convertAndSend("topicExchange", "topic.message", context);
 }
 public void send2() {
  String context = "hi, i am messages 2";
  System.out.println("Sender : " + context);
  this.rabbitTemplate.convertAndSend("topicExchange", "topic.messages", context);
  }
}

3).消息消費(fèi)者

TopicReceiver.java類:

package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.message")
public class TopicReceiver {
 @RabbitHandler
 public void process(String message) {
  System.out.println("Topic Receiver1 : " + message);
 }
}

TopicReceiver2.java類:

package com.example.rabbitmqtopic.rabbitmq;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "topic.messages")
public class TopicReceiver2 {
 @RabbitHandler
 public void process(String message) {
  System.out.println("Topic Receiver2 : " + message);
 }
}

4).測(cè)試

RabbitMQTopicTest.java類:

package com.example.rabbitmqtopic.rabbitmq;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitMQTopicTest {
 @Autowired
 private TopicSender sender;
 @Test
 public void topic() throws Exception {
  sender.send();
 }
 @Test
 public void topic1() throws Exception {
  sender.send1();
 }
 @Test
 public void topic2() throws Exception {
  sender.send2();
 }
}

以上所述是小編給大家介紹的Spring Boot整合RabbitMQ實(shí)例(Topic模式),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列

    Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列

    這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組模擬循環(huán)隊(duì)列,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們也有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 詳解Spring Boot中初始化資源的幾種方式

    詳解Spring Boot中初始化資源的幾種方式

    這篇文章主要介紹了詳解Spring Boot中初始化資源的幾種方式,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • 通過實(shí)例了解Java jdk和jre的區(qū)別

    通過實(shí)例了解Java jdk和jre的區(qū)別

    這篇文章主要介紹了通過實(shí)例了解Java jdk和jre的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • maven?setting.xml文件配置禪定之旅

    maven?setting.xml文件配置禪定之旅

    這篇文章主要為大家介紹了maven?setting.xml文件禪定之旅,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • java制作仿微信視頻播放控件

    java制作仿微信視頻播放控件

    這篇文章主要介紹了java制作仿微信視頻播放控件的方法和代碼分享,控件繼承自SurfaceView,十分的實(shí)用,小伙伴們可以自由擴(kuò)展。
    2015-04-04
  • Spring?Boot?使用斷言讓你的代碼在上線前就通過“體檢”(最新整理)

    Spring?Boot?使用斷言讓你的代碼在上線前就通過“體檢”(最新整理)

    斷言是一種編程技巧,用于在代碼中插入檢查點(diǎn),驗(yàn)證程序的狀態(tài)是否符合預(yù)期,如果斷言失敗,程序會(huì)拋出一個(gè)錯(cuò)誤,幫助你快速發(fā)現(xiàn)和修復(fù)bug,本文給大家介紹Spring?Boot?斷言:讓你的代碼在上線前就通過“體檢”,感興趣的朋友一起看看吧
    2025-03-03
  • IDEA創(chuàng)建Servlet程序的兩種實(shí)現(xiàn)方法

    IDEA創(chuàng)建Servlet程序的兩種實(shí)現(xiàn)方法

    Servlet是JavaWeb應(yīng)用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實(shí)現(xiàn)方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • javaweb實(shí)戰(zhàn)之商城項(xiàng)目開發(fā)(三)

    javaweb實(shí)戰(zhàn)之商城項(xiàng)目開發(fā)(三)

    這篇文章主要針對(duì)javaweb商城項(xiàng)目開發(fā)進(jìn)行實(shí)戰(zhàn)演習(xí),主要實(shí)現(xiàn)通用的BaseDao.java和使用resultMap映射關(guān)聯(lián)對(duì)象,感興趣的小伙伴們可以參考一下
    2016-02-02
  • idea2019.2安裝MybatisCodeHelper插件的超詳細(xì)教程

    idea2019.2安裝MybatisCodeHelper插件的超詳細(xì)教程

    這篇文章主要介紹了idea2019.2安裝MybatisCodeHelper插件的教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Gateway的入門概述及主要功能

    Spring Gateway的入門概述及主要功能

    Spring Gateway是Spring Cloud微服務(wù)生態(tài)下的網(wǎng)關(guān)組件,網(wǎng)絡(luò)層使用了基于非阻塞的 Netty使用異步IO增加了系統(tǒng)的性能,Gateway 是基于 Spring 5 和 Spring Boot 2 搭建的,這篇文章主要介紹了Spring Gateway的入門概述簡(jiǎn)介,需要的朋友可以參考下
    2024-04-04

最新評(píng)論

凌源市| 雅江县| 屯留县| 乐东| 惠东县| 油尖旺区| 集安市| 黄浦区| 潮州市| 潞西市| 吴堡县| 永胜县| 镇安县| 伊通| 宁武县| 兰溪市| 铁岭县| 莎车县| 朔州市| 大英县| 佛山市| 吴桥县| 镇坪县| 洪湖市| 涞水县| 荃湾区| 恩施市| 鸡东县| 手游| 大姚县| 重庆市| 通州市| 贞丰县| 饶阳县| 临朐县| 屏东县| 调兵山市| 思南县| 张北县| 彭泽县| 武冈市|