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

Springboot?整合?RabbitMQ?消息隊(duì)列?詳情

 更新時(shí)間:2022年08月17日 15:25:34   作者:苦糖?  
這篇文章主要介紹了Springboot整合RabbitMQ?消息隊(duì)列詳情,文章為榮啊主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

生產(chǎn)者工程

POM依賴

可以在創(chuàng)建工程時(shí)直接選擇添加依賴。

application文件

因?yàn)閞abbitmq具有默認(rèn)地址及用戶信息,所以如果是本地rabbitmq可以不需要進(jìn)行配置。

RabbitMQ配置文件:

在使用相關(guān)交換機(jī)及隊(duì)列時(shí),我們需要實(shí)現(xiàn)聲明交換機(jī)及隊(duì)列,如果沒(méi)有對(duì)應(yīng)信息,則啟動(dòng)項(xiàng)目會(huì)失敗。所以在使用springboot整合rabbitmq時(shí),我們可以通過(guò)配置文件來(lái)進(jìn)行交換機(jī)、隊(duì)列的聲明及二者之間的關(guān)系綁定。 由于目前在演示Fanout模式,所以使用FanoutExchange來(lái)聲明交換機(jī),其他模式則使用相對(duì)應(yīng)的TopicExchange,DirectExchange來(lái)聲明。

@Configuration
public class RabbitMQConfiguration {

//聲明fanout模式的交換機(jī)
@Bean
public FanoutExchange fanoutExchange() {
? ? return new FanoutExchange("fanout_order_exchange", true, false);
}

//聲明隊(duì)列
@Bean
public Queue smsQueue() {
? ? return new Queue("sms.fanout.queue", true);
}

@Bean
public Queue emailQueue() {
? ? return new Queue("email.fanout.queue", true);
}

@Bean
public Queue duanxinQueue() {
? ? return new Queue("duanxin.fanout.queue", true);
}
//綁定

@Bean
public Binding smsBinding() {
? ? return BindingBuilder.bind(smsQueue()).to(fanoutExchange());
}

@Bean
public Binding emailBinding() {
? ? return BindingBuilder.bind(emailQueue()).to(fanoutExchange());
}

@Bean
public Binding duanxinBinding() {
? ? return BindingBuilder.bind(duanxinQueue()).to(fanoutExchange());
}
}

生產(chǎn)者業(yè)務(wù)代碼

這部分代碼就簡(jiǎn)單的通過(guò)調(diào)用rabbitTemplate來(lái)進(jìn)行消息的分發(fā)。@Service public class OrderService {

@Autowired
private RabbitTemplate rabbitTemplate;

public void makeOrder() {
? ? // 保存訂單
? ? String orderId = UUID.randomUUID().toString();
? ? System.out.println("下單成功:" + orderId);
? ? // 通過(guò)MQ完成消息的分發(fā)
? ? // 參數(shù)1:交換機(jī) ;參數(shù)2:路由key/隊(duì)列名;參數(shù)3:消息內(nèi)容
? ? String exchangeName = "fanout_order_exchange";
? ? rabbitTemplate.convertAndSend(exchangeName, "", orderId);
}
}

消費(fèi)者:

消費(fèi)者工程和生產(chǎn)者工程類(lèi)似,我們首先需要引入依賴,然后在application文件中進(jìn)行相關(guān)的配置即可開(kāi)始編寫(xiě)代碼。 在消費(fèi)者工程中我們也可以編寫(xiě)rabbitmq的配置文件來(lái)進(jìn)行交換機(jī)及隊(duì)列的聲明。建議在消費(fèi)端編寫(xiě)配置文件,因?yàn)橄M(fèi)端是先啟動(dòng)的工程,如果交換機(jī)和隊(duì)列未創(chuàng)建會(huì)導(dǎo)致工程啟動(dòng)失敗。 消息監(jiān)聽(tīng)

我們通過(guò)RabbitListener注解來(lái)監(jiān)聽(tīng)消息隊(duì)列。需要注意的是我們需要通過(guò)Component注解將該監(jiān)聽(tīng)交給spring管理,否則不能正常接收服務(wù)端的消息。 這邊只給出一個(gè)email的消息監(jiān)聽(tīng),上文生產(chǎn)者聲明的duanxin,sms隊(duì)列可以自行創(chuàng)建,只需要修改隊(duì)列名即可。@Service public class OrderService {

@RabbitListener(queues = {"email.fanout.queue"})
@Component
public class FanoutEmailService {
? ? @RabbitHandler
? ? public void receive(String message) {
? ? ? ? System.out.println("email fanout -----》接收到" + message);
? ? }
}

測(cè)試

首先啟動(dòng)消費(fèi)者工程,然后在生產(chǎn)者工程中創(chuàng)建測(cè)試類(lèi)發(fā)送消息即可。

@SpringBootTest class SpringbootOrderRabbitmqProducerApplicationTests {

@Autowired
private OrderService orderService;

@Test
void contextLoads() {
? ? orderService.makeOrder();
}
}

當(dāng)發(fā)送消息后,我們可以在控制臺(tái)中發(fā)現(xiàn)消費(fèi)者成功接受消息。

Direct 模式

生產(chǎn)者

建立工程的步驟和上文相同。

配置文件

配置和上文基本相同,由于該部分測(cè)試direct模式,所以需要使用DirectExchange創(chuàng)建交換機(jī)。需要注意的是該類(lèi)中的方法名不能和上文rabbitmq的配置文件中的方法名相同,因?yàn)槲覀兪褂胋ean注解將其交給spring管理,如果名字相同,則會(huì)啟動(dòng)項(xiàng)目失敗。

@Configuration
public class DirectRabbitMQConfiguration {

//聲明direct模式的交換機(jī)
@Bean
public DirectExchange directExchange() {
? ? return new DirectExchange("direct_order_exchange", true, false);
}

//聲明隊(duì)列
@Bean
public Queue smsDirectQueue() {
? ? return new Queue("sms.direct.queue", true);
}

@Bean
public Queue emailDirectQueue() {
? ? return new Queue("email.direct.queue", true);
}

@Bean
public Queue duanxinDirectQueue() {
? ? return new Queue("duanxin.direct.queue", true);
}
//綁定

@Bean
public Binding smsDirectBinding() {
? ? return BindingBuilder.bind(smsDirectQueue()).to(directExchange()).with("sms");
}

@Bean
public Binding emailDirectBinding() {
? ? return BindingBuilder.bind(emailDirectQueue()).to(directExchange()).with("email");
}

@Bean
public Binding duanxinDirectBinding() {
? ? return BindingBuilder.bind(duanxinDirectQueue()).to(directExchange()).with("duanxin");
}
}

業(yè)務(wù)代碼

@Service
public class OrderService {

? ? @Autowired
? ? private RabbitTemplate rabbitTemplate;

? ? public void makeOrderDirect() {
? ? ? ? // 保存訂單
? ? ? ? String orderId = UUID.randomUUID().toString();
? ? ? ? System.out.println("下單成功:" + orderId);
? ? ? ? String exchangeName = "direct_order_exchange";
? ? ? ? rabbitTemplate.convertAndSend(exchangeName, "sms", orderId);
? ? ? ? rabbitTemplate.convertAndSend(exchangeName, "email", orderId);
? ? }

}

消費(fèi)者

消息監(jiān)聽(tīng)

和上文相同,只需注意隊(duì)列名即可。

@RabbitListener(queues = {"email.direct.queue"})
@Component
public class DirectEmailService {
? ? @RabbitHandler
? ? public void receive(String message) {
? ? ? ? System.out.println("email direct -----》接收到" + message);
? ? }
}

Topic 模式

上文中個(gè)模式都是通過(guò)配置文件來(lái)聲明交換機(jī),隊(duì)列及綁定二者之間的關(guān)系;實(shí)際上我們還可以通過(guò)注解的方式來(lái)聲明交換機(jī)及注解。

生產(chǎn)者

由于使用注解方式聲明,所以我們不需要?jiǎng)?chuàng)建配置文件,直接編寫(xiě)業(yè)務(wù)代碼即可。測(cè)試的時(shí)候我們只需修改路由名即可,具體如何修改,請(qǐng)前往文章開(kāi)頭鏈接查看各模式是如何使用的。

@Service
public class OrderService {

@Autowired
private RabbitTemplate rabbitTemplate;

public void makeOrderTopic() {
? ? // 保存訂單
? ? String orderId = UUID.randomUUID().toString();
? ? System.out.println("下單成功:" + orderId);
? ? String exchangeName = "topic_order_exchange";
? ? String routingKey = "com.email";
? ? rabbitTemplate.convertAndSend(exchangeName, routingKey, orderId);
}
}

消費(fèi)者

代碼和上文基本相同,區(qū)別在于我們直接在RabbitListener注解中將隊(duì)列和交換機(jī)進(jìn)行綁定。需要注意的是各參數(shù)中都是使用字符串。 value對(duì)應(yīng)的是隊(duì)列,相應(yīng)的參數(shù)分別是隊(duì)列名、持久化、自動(dòng)刪除。 exchange對(duì)應(yīng)的交換機(jī),相應(yīng)的參數(shù)分別是交換機(jī)名以及交換機(jī)類(lèi)型。 key對(duì)應(yīng)的是路由名。

@RabbitListener(bindings = @QueueBinding(
? ? ? ? value = @Queue(value = "email.topic.queue",durable = "true",autoDelete = "false"),
? ? ? ? exchange = @Exchange(value = "topic_order_exchange",type = ExchangeTypes.TOPIC),
? ? ? ? key = "*.email.#"
))
@Component
public class TopicEmailService {
? ? @RabbitHandler
? ? public void receive(String message) {
? ? ? ? System.out.println("email topic -----》接收到" + message);
? ? }
}

以上便是springboot 整合 rabbitmq的兩種方式。但是在日常開(kāi)發(fā)中更推薦使用配置文件的形式來(lái)實(shí)現(xiàn),因?yàn)樵谂渲梦募锌梢愿玫奶幚磉^(guò)期時(shí)間、死信隊(duì)列等消息隊(duì)列中的高級(jí)特性。

到此這篇關(guān)于Springboot 整合 RabbitMQ 消息隊(duì)列 詳情的文章就介紹到這了,更多相關(guān)Springboot 整合 RabbitMQ 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?Data?Exists查詢最佳方法編寫(xiě)示例

    Spring?Data?Exists查詢最佳方法編寫(xiě)示例

    這篇文章主要為大家介紹了Spring?Data?Exists查詢最佳方法編寫(xiě)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java面試Logback打印日志如何獲取當(dāng)前方法名稱(chēng)題解

    Java面試Logback打印日志如何獲取當(dāng)前方法名稱(chēng)題解

    這篇文章主要為大家介紹了Java面試Logback打印日志如何獲取當(dāng)前方法名稱(chēng)題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • java和matlab畫(huà)多邊形閉合折線圖示例講解

    java和matlab畫(huà)多邊形閉合折線圖示例講解

    由于要將“哈密頓回路問(wèn)題(TSP)”的求解中間結(jié)果表示出來(lái),查了一下使用程序畫(huà)多邊形圖形?,F(xiàn)在在總結(jié)一下,這個(gè)圖是“由給定節(jié)點(diǎn)首尾相連的”閉合多邊形
    2014-02-02
  • Java的Hibernate框架中Criteria查詢使用的實(shí)例講解

    Java的Hibernate框架中Criteria查詢使用的實(shí)例講解

    這篇文章主要介紹了Java的Hibernate框架中Criteria查詢使用的實(shí)例講解,Hibernate是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2016-01-01
  • java面試突擊之sleep和wait有什么區(qū)別詳析

    java面試突擊之sleep和wait有什么區(qū)別詳析

    按理來(lái)說(shuō)sleep和wait本身就是八竿子打不著的兩個(gè)東西,但是在實(shí)際使用中大家都喜歡拿他們來(lái)做比較,或許是因?yàn)樗鼈兌伎梢宰尵€程處于阻塞狀態(tài),這篇文章主要給大家介紹了關(guān)于java面試突擊之sleep和wait有什么區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Java泛型類(lèi)型擦除

    Java泛型類(lèi)型擦除

    這篇文章主要為大家詳細(xì)介紹了Java泛型類(lèi)型擦除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • Java中使用instanceof判斷對(duì)象類(lèi)型的示例

    Java中使用instanceof判斷對(duì)象類(lèi)型的示例

    在List<Object>中遍歷Object時(shí),先判斷類(lèi)型,再定向轉(zhuǎn)換,本文給大家介紹Java中使用instanceof判斷對(duì)象類(lèi)型,感興趣的朋友跟隨小編一起看看吧
    2023-08-08
  • 解決IDEA創(chuàng)建maven項(xiàng)目時(shí)pom.xml沒(méi)有變藍(lán)的問(wèn)題

    解決IDEA創(chuàng)建maven項(xiàng)目時(shí)pom.xml沒(méi)有變藍(lán)的問(wèn)題

    這篇文章主要介紹了解決IDEA創(chuàng)建maven項(xiàng)目時(shí)pom.xml沒(méi)有變藍(lán)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • java關(guān)閉流連接IO工具類(lèi)

    java關(guān)閉流連接IO工具類(lèi)

    這篇文章主要為大家詳細(xì)介紹了java關(guān)閉流連接IO工具類(lèi),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • SpringBoot3集成和使用Jasypt的代碼詳解

    SpringBoot3集成和使用Jasypt的代碼詳解

    隨著信息安全的日益受到重視,加密敏感數(shù)據(jù)在應(yīng)用程序中變得越來(lái)越重要,Jasypt作為一個(gè)簡(jiǎn)化Java應(yīng)用程序中數(shù)據(jù)加密的工具,為開(kāi)發(fā)者提供了一種便捷而靈活的加密解決方案,本文將深入解析Jasypt的工作原理,需要的朋友可以參考下
    2024-01-01

最新評(píng)論

平谷区| 房产| 平乡县| 阳曲县| 安化县| 富顺县| 盘锦市| 东台市| 交城县| 崇礼县| 碌曲县| 奈曼旗| 星座| 上虞市| 兰西县| 武乡县| 禄丰县| 广宁县| 黄陵县| 云浮市| 怀仁县| 庆城县| 内丘县| 阳原县| 曲阳县| 九龙城区| 新民市| 中江县| 庆城县| 庆元县| 包头市| 鲁山县| 鸡西市| 沾益县| 宜兰市| 宿州市| 临漳县| 二连浩特市| 陆丰市| 太白县| 察隅县|