<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          SpringBoot對消息隊(duì)列(MQ)的支持

          共 4218字,需瀏覽 9分鐘

           ·

          2020-08-12 10:39


          1.異步消息的定義

          ??

          異步消息的主要目的是為了系統(tǒng)與系統(tǒng)之間的通信,所謂異步消息即消息發(fā)送者無需等待消息接收者的處理以及返回,甚至無需關(guān)心消息是否發(fā)送成功。
          ??

          在異步消息中有兩個很重要的概念,即消息代理和目的地,當(dāng)消息發(fā)送者發(fā)送消息之后,消息將由消息代理接管,消息代理保證消息傳遞到指定目的地。
          ??

          異步消息主要有兩種目的地形式,隊(duì)列(queue)和主題(topic),隊(duì)列用于點(diǎn)對點(diǎn)形式的消息通信,主題用于發(fā)布訂閱式的消息通信。


          1.1目的地形式分類


          1.1.1點(diǎn)對點(diǎn)式

          ??

          當(dāng)消息發(fā)送者發(fā)送消息,消息代理將消息后將消息放進(jìn)一個隊(duì)列里,當(dāng)有消息接收者來接收消息的時候,消息將從隊(duì)列中取出傳遞給消息接收者,這時候隊(duì)列里就沒有了這條消息。點(diǎn)對點(diǎn)式確保每一條消息只有唯一的發(fā)送者和接收者,但這并不能說明只有一個接收者能夠從隊(duì)列中接收消息,因?yàn)殛?duì)列中有多個消息,點(diǎn)對點(diǎn)式只保證每一條消息只有唯一的發(fā)送者和接收者。


          1.1.2發(fā)布/訂閱式

          ??

          發(fā)布訂閱式是消息發(fā)送者發(fā)送消息到主題,而多個消息接收者監(jiān)聽這個主題,此時的消息發(fā)送者和接收者分別叫做發(fā)布者和訂閱者。


          1.2 企業(yè)級消息代理

          ??

          JMS即JAVA消息服務(wù),是基于JVM的消息代理規(guī)范,ActiveMQ是一個JMS的實(shí)現(xiàn)
          AMQP也是一個消息代理的規(guī)范,他不僅兼容JMS,還支持跨語言和平臺,AMQP的主要實(shí)現(xiàn)是RabbitMQ。


          1.3 Spring以及SpringBoot的支持

          ??

          Spring針對JMS和RabbitMQ分別提供了JmsTemplete和RabbitTemplete來發(fā)送消息。為我們提供了@JmsListener,@RabbitListener注解來監(jiān)聽消息代理發(fā)送的消息。我們分別需要通過@EnableJms和@EnableRabbit來開啟支持。
          ??

          SpringBoot自動配置了上述@EnableJms,@EnableRabbit,JmsTemplete,RabbitTemplete的支持,同時我們可以在application.properties文件中分別以spring.activemq和spring.rabbitmq來分別配置所需的屬性。


          2.SpringBoot對JMS(ActiveMQ)的支持下載安裝


          ActiveMQ的官方下載地址:http://activemq.apache.org/download.html,下載安裝完成后,進(jìn)入bin目錄,發(fā)現(xiàn)有win32和win64兩個文件夾,這2個文件夾分別對應(yīng)windows32位和windows64位操作系統(tǒng)的啟動腳本。進(jìn)入對應(yīng)的文件夾中雙擊activemq.bat。即可正常啟動。


          訪問http://localhost:8161/admin。輸入默認(rèn)的用戶名和密碼:admin/admin即可進(jìn)入ActiveMQ的控制臺。


          2.2 配置


          SpringBoot提供了針對ActiveMQ的支持,只需要在pom.xml文件中引入即可:


          <dependency>
          ???<groupId>org.springframework.bootgroupId>
          ???<artifactId>spring-boot-starter-activemqartifactId>
          dependency>


          在application.properties配置ActiveMQ的消息代理地址:


          spring.activemq.broker-url=tcp://localhost:61616


          注意,此處配置的消息代理必須讓ActiveMQ啟動時才有作用,否則無效。


          在實(shí)際情況下,消息的發(fā)布者和接受者一般都是分開的,而這里,我們僅作測試,將消息發(fā)送者和接收者放在一個程序中。


          2.3代碼文件


          2.3.1消息定義


          public?class?Msg?implements?MessageCreator?{
          ????@Override
          ????public?Message createMessage(Session session)?throws?JMSException {
          ????????return?session.createTextMessage("測試消息");
          ????}
          }


          2.3.2消息發(fā)送及目的地定義


          @SpringBootApplication
          public?class?SpringBootMqApplication?implements?CommandLineRunner{

          ????@Autowired
          ????JmsTemplate jmsTemplate;
          ????public?static?void?main(String[] args)?{
          ????????SpringApplication.run(SpringBootMqApplication.class, args);
          ????}

          ????@Override
          ????public?void?run(String... args)?throws?Exception {
          ????????????jmsTemplate.send("my-destination",new?Msg());
          ????}
          }


          CommandLineRunner接口中的run方法,是在程序啟動后就會執(zhí)行的代碼。JmsTemplate ?是用來操作JMS消息的操作類。


          2.3.3消息監(jiān)聽


          @Component
          public?class?Receiver?{
          ????@JmsListener(destination = "my-destination")
          ????public?void??receivedMessage(String message){
          ????????System.out.println("接受到"+message);
          ????}
          }


          @JmsListener顯示的定義了指定要監(jiān)聽的目的地。


          2.3.4運(yùn)行結(jié)果


          運(yùn)行結(jié)果顯示監(jiān)聽收到了消息




          ActiveMQ的控制臺中顯示我們發(fā)送的消息



          3.SpringBoot對AMQP(RabbitMQ)的支持


          3.1RabbitMQ的安裝配置


          RabbitMQ是基于Erlang語言開發(fā)的。所以安裝RabbitMQ之前需要先下載安裝配置Erlang,下載地址:http://www.erlang.org/downloads


          并將安裝后的D:\Program Files\erl9.0\bin的bin目錄配置到path環(huán)境變量中。然后下載安裝RabbitMQ。下載地址:http://www.rabbitmq.com/download.html
          安裝完成之后在開始菜單中找到RabbitMQ Command Promt,打開控制臺,輸入命令

          rabbitmq-plugins enable rabbitmq_management


          控制臺無錯誤之后,訪問http://localhost:15672。使用默認(rèn)的用戶名/密碼:guest/guest進(jìn)行登錄。


          即可見到如圖所示界面:



          3.2 RabbitMQ測試代碼文件


          SpringBoot默認(rèn)Rabbit的主機(jī)為localhost,端口號為5672,所以我們無需為RabbitMQ配置其他信息。


          入口文件


          import?org.springframework.amqp.core.Queue;
          import?org.springframework.amqp.rabbit.core.RabbitTemplate;
          import?org.springframework.beans.factory.annotation.Autowired;
          import?org.springframework.boot.CommandLineRunner;
          import?org.springframework.boot.SpringApplication;
          import?org.springframework.boot.autoconfigure.SpringBootApplication;
          import?org.springframework.context.annotation.Bean;

          import?java.lang.annotation.Annotation;

          @SpringBootApplication
          public?class?SpringBootAmqpApplication?implements?CommandLineRunner?{
          ????@Autowired
          ?????RabbitTemplate rabbitTemplate;
          ????public?static?void?main(String[] args)?{
          ????????SpringApplication.run(SpringBootAmqpApplication.class, args);
          ????}

          ????@Bean?//2
          ????public?Queue wiselyQueue(){
          ????????return?new?Queue("my-queue");
          ????}

          ????@Override
          ????public?void?run(String... strings)?throws?Exception {
          ????????rabbitTemplate.convertAndSend("my-queue","來自RabbitMQ的問候");
          ????}
          }


          接收類


          @Component
          public?class?Receiver?{
          ????@RabbitListener(queues = "my-queue")
          ????public??void??ReceiveMesaage(String message){
          ????????System.out.println("接受到"+message);
          ????}
          }


          3.3 測試結(jié)果




          在RabbitMQ控制臺中額可以看到



          4 小結(jié)


          這里主要是對ActiveMQ和RabbitMQ進(jìn)行了簡單的嘗試,了解了異步消息的通信。有興趣的同學(xué)可以進(jìn)行深入研究。


          作者:微瞰技術(shù)

          出處:csdn.net/u011342403/article/details/77940765




          瀏覽 50
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  囯产一级持黄视频 | 含羞草自拍原创一区二区三区视频 | 国产精品大全 | 全网三级视频在线观看 | 日韩av电影免费在线观看 |