日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

新手入门教程-------Spring Boot中集成RabbitMQ

發布時間:2025/3/12 javascript 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 新手入门教程-------Spring Boot中集成RabbitMQ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

AMQP:是Advanced Message Queuing Protocol的簡稱,高級消息隊列協議,是一個面向消息中間件的開放式標準應用層協議。

?

定義了以下特性:

  • 消息方向
  • 消息隊列
  • 消息路由(包括:點到點和發布-訂閱模式)
  • 可靠性
  • 安全性

RabitMQ:是以AMQP協議實現的一種中間件產品。RabbitMq是一個開源的AMQP實現,服務器端用erlang語言編寫,支持多種客戶端。

常用概念:
通常由三個概念:發消息者、隊列、收消息者,RabbitMQ?在這個基本概念之上, 多做了一層抽象, 在發消息者和 隊列之間, 加入了交換器 (Exchange). 這樣發消息者和隊列就沒有直接聯系, 轉而變成發消息者把消息給交換器, 交換器根據調度策略再把消息再給隊列。

?

首先,先安裝Erland,通過官方下載頁面http://www.erlang.org/downloads獲取exe安裝包,直接打開并完成安裝。

接著,

  • 安裝RabbitMq,通過官方下載頁面https://www.rabbitmq.com/download.html獲取exe安裝包。
  • 下載完成后,直接運行安裝程序。
  • RabbitMQ Server安裝完成之后,會自動的注冊為服務,并以默認配置啟動起來。
  • 環境搭建可以參考:http://blog.didispace.com/spring-boot-rabbitmq/

    RabbitMQ管理:

    我們可以直接通過配置文件的訪問進行管理,也可以通過Web的訪問進行管理。下面我們將介紹如何通過Web進行管理。

    在sbin文件夾打開CMD,執行rabbitmq-plugins enable rabbitmq_management命令,開啟Web管理插件,這樣我們就可以通過瀏覽器來進行管理了。

    重啟mq的命令是:rabbitmq-server restart

    ?

    ?

    • 打開瀏覽器并訪問:http://localhost:15672/,并使用默認用戶guest登錄,密碼也為guest。我們可以看到如下圖的管理頁面:

    ?

    • 點擊Admin標簽,在這里可以進行用戶的管理。例如添加用戶,記得要給用戶設置權限,不然可能會導致下面工程連接不上。

    ?

    利用springboot來進行整合:

    1. 編寫配置文件類:

    在com.example包中增加類,名稱為HelloRabbitConfig,并修改代碼為

  • package?com.example;??
  • ??
  • import?org.springframework.amqp.core.Queue;??
  • import?org.springframework.context.annotation.Bean;??
  • import?org.springframework.context.annotation.Configuration;??
  • ??
  • @Configuration??
  • public?class?HelloRabbitConfig?{??
  • ??
  • ????@Bean??
  • ????public?Queue?helloQueue()?{??
  • ????????return?new?Queue("hello");??
  • ????}??
  • }??
  • 2. 編寫發送消息類:

    在com.example包中增加類,名稱為HelloSender,并修改代碼為:

  • package?com.example;??
  • ??
  • import?java.util.Date;??
  • ??
  • import?org.slf4j.Logger;??
  • import?org.slf4j.LoggerFactory;??
  • import?org.springframework.amqp.core.AmqpTemplate;??
  • import?org.springframework.beans.factory.annotation.Autowired;??
  • import?org.springframework.stereotype.Component;??
  • ??
  • @Component??
  • public?class?HelloSender?{??
  • ??
  • ????protected?static?Logger?logger=LoggerFactory.getLogger(HelloSender.class);???
  • ??????
  • ????@Autowired??
  • ????private?AmqpTemplate?rabbitTemplate;??
  • ??
  • ????public?String?send(String?name)?{??
  • ????????String?context?=?"hello?"+name+"?--"?+?new?Date();??
  • ????????logger.debug("HelloSender:?"?+?context);??
  • ????????this.rabbitTemplate.convertAndSend("hello",?context);??
  • ????????return?context;??
  • ????}??
  • }??
  • 3.編寫接收消息類:

    在com.example包中增加類,名稱為HelloReceiver,并修改代碼為

  • package?com.example;??
  • ??
  • import?org.slf4j.Logger;??
  • import?org.slf4j.LoggerFactory;??
  • import?org.springframework.amqp.rabbit.annotation.RabbitHandler;??
  • import?org.springframework.amqp.rabbit.annotation.RabbitListener;??
  • import?org.springframework.stereotype.Component;??
  • ??
  • @Component??
  • @RabbitListener(queues?=?"hello")??
  • public?class?HelloReceiver?{??
  • ????protected?static?Logger?logger?=?LoggerFactory.getLogger(HelloReceiver.class);??
  • ??
  • ????@RabbitHandler??
  • ????public?void?process(String?hello)?{??
  • ????????logger.debug("HelloReceiver?:?"?+?hello);??
  • ????}??
  • }??
  • 4. 編寫RestController 類,調用發送消息:

    在com.example包中增加類,名稱為HelloController,并修改代碼為

  • package?com.example;??
  • ??
  • import?org.slf4j.Logger;??
  • import?org.slf4j.LoggerFactory;??
  • import?org.springframework.beans.factory.annotation.Autowired;??
  • import?org.springframework.web.bind.annotation.PathVariable;??
  • import?org.springframework.web.bind.annotation.RequestMapping;??
  • import?org.springframework.web.bind.annotation.RestController;??
  • ??
  • @RestController???
  • public?class?HelloController?{??
  • ????protected?static?Logger?logger=LoggerFactory.getLogger(HelloController.class);???
  • ??????
  • ????@Autowired??
  • ????????private?HelloSender?helloSender;??
  • ??????
  • ????@RequestMapping("/send/{name}")??
  • ????public?String?helloworld(@PathVariable?String?name)?{??
  • ????????return?helloSender.send(name);??
  • ????}??
  • }??
  • 5. 運行測試

    在sbin文件夾CMD調用rabbitmq-server restart之后,在工程所在目錄打開命令行,執行mvn spring-boot:run,最后在瀏覽器輸入http://localhost:8080/send/上帝

    參考:https://blog.csdn.net/u012930316/article/details/76853778

    ?

    ?

    工程解析:

    1.配置文件:

    在配置文件中,僅僅配置了一個名為hello的隊列,以后發送,接收都與這個隊列有關

    2. 發送消息:

    2.1發送消息使用模板機制,用springboot自動注入rabbitmqTemplate,它封裝好了鏈接,管道,轉換等

    2.2消息轉換和發送

    void convertAndSend(String routingKey, Object message) throws AmqpException;

    它的注釋是:Convert a Java object to an Amqp {@link Message} and send it to a default exchange with a specific routing key.

    將一個Java對象轉換為Amqp消息,然后用缺省的減緩及指定路由鍵發送信息。

    ?

    public void convertAndSend(String exchange, String routingKey, final Object object, CorrelationData correlationData)
    exchange:交換機名稱

    routingKey:路由關鍵字

    object:發送的消息內容

    correlationData:消息ID

    ?

    3. 接收消息

    3.1監聽消息

    在類上聲明@RabbitListener(queues = "hello"),表示監聽hello隊列

    3.2消息處理句柄

    在接收處理消息的方法上聲明@RabbitHandler

    Annotation that marks a method to be the target of a Rabbit message? listener within a class that is annotated with {@link RabbitListener}.

    消息消費者:

    消費者負責聲明交換機(生產者也可以聲明),隊列,以及兩者的綁定操作。

    交換機:

    /**
    ? ? ?* 針對消費者配置
    ? ? ? ? FanoutExchange: 將消息分發到所有的綁定隊列,無routingkey的概念
    ? ? ? ? HeadersExchange :通過添加屬性key-value匹配
    ? ? ? ? DirectExchange:按照routingkey分發到指定隊列
    ? ? ? ? TopicExchange:多關鍵字匹配
    ? ? ?*/
    ? ? @Bean
    ? ? public DirectExchange defaultExchange() {
    ? ? ? ? return new DirectExchange(EXCHANGE);
    ? ? }

    ?

    隊列:


    @Bean
    ? ? public Queue queue() {
    ? ? ? ? return new Queue("spring-boot-queue", true); //隊列持久
    ?
    ? ? }

    ?

    綁定:binding:

    ?

    ? @Bean
    ? ? public Binding binding() {
    ? ? ? ? return BindingBuilder.bind(queue()).to(defaultExchange()).with(AmqpConfig.ROUTINGKEY);
    ? ? }

    ?


    ?

    ?

    ?

    整體:整個工程比較簡單,沒有什么特殊的配置,僅僅三個類文件即可實現消息的發送和接受。

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的新手入门教程-------Spring Boot中集成RabbitMQ的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。