springboot整合ActiveMQ1(基本使用)

說明:acitveMQ 版本爲:5.9.1,springboot 版本爲 2.0.3html

一. 下載安裝(windows)

  官方下載地址:點我跳轉,選擇 windows 安裝包下載,而後解壓,解壓後運行 bin 目錄下的activemq.bat啓動服務,無報錯便可啓動成功。默認管理地址爲:localhost:8161/admin,默認管理員帳號密碼爲admin/adminjava

二. springboot 整合

1. 建立 springboot 項目

  建立 springboot web 項目,加入 spring-boot-starter-activemq 依賴。git

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

  而後編輯配合文件,加上一個配置:61616 爲 activeMQ 的默認端口,暫時不作其餘配置,使用默認值。github

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

2. 建立生產者消費者

  springboot 中 activeMQ 的默認配置爲生產-消費者模式,還有一種模式爲發佈-訂閱模式後面再講。項目目錄以下:web

項目目錄

  首先編寫配置類 Config.java,代碼以下spring

@Configuration
public class Config {
    @Bean(name = "queue2")
    public Queue queue2(){
        return new ActiveMQQueue("active.queue2");
    }

    @Bean(name = "queue1")
    public Queue queue1(){
        return new ActiveMQQueue("active.queue1");
    }
}

上面的代碼創建了兩個消息隊列 queue1,queue2,分別由 queue1 和 queue2 這兩個 Bean 注入到 Spring 容器中。程序運行後會在 activeMQ 的管理頁面->queue 中看到以下:apache

隊列

  生產者 Producer.java 代碼以下:windows

@RestController
public class Producer {
    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;
    @Autowired()
    @Qualifier("queue2")
    private Queue queue2;
    @Autowired()
    @Qualifier("queue1")
    private Queue queue1;

    @GetMapping("/queue2")
    public void sendMessage1(String message){
            jmsMessagingTemplate.convertAndSend(queue2,"I'm from queue2:"+message);
    }

    @GetMapping("/queue1")
    public void sendMessage2(String message){
        jmsMessagingTemplate.convertAndSend(queue1,"I'm from queue1:"+message);
    }
}

上面的類建立了兩個 GET 接口,訪問這兩個接口分別向 queue1 和 queue2 中發送消息。springboot

消費者 Comsumer.java 代碼以下:app

@Component //將該類註解到Spring 容器中
public class Comsumer {
    //接受消息隊列1消息
    @JmsListener(destination = "active.queue1") //監聽active.queue1消息隊列
    public void readActiveQueue11(String message){
        System.out.println(1+message);
    }

    //接受消息隊列1消息
    @JmsListener(destination = "active.queue1")
    public void readActiveQueue12(String message){
        System.out.println(2+message);
    }

    //接受消息隊列2消息
    @JmsListener(destination = "active.queue2")
    public void readActiveQueue21(String message){
        System.out.println(1+message);
    }

    //接受消息隊列2消息
    @JmsListener(destination = "active.queue2")
    public void readActiveQueue22(String message){
        System.out.println(2+message);
    }
}

上面的代碼定義了 4 個消費者,每兩個消費一個消息隊列。

3. 運行

  啓動項目後分別向/queue1?message=niihao,/queue2?message=nihaoa 發送 http 請求,而後咱們能夠在控制檯中看到以下輸出:

2I'm from queue2:nihaoa
1I'm from queue2:nihaoa
2I'm from queue1:nihao
1I'm from queue1:nihao

消息都成功被消費者消費,從打印結果也可看出生產者消費者的一個特色:一個消息只會被一個消費者消費。同時在管理頁面中能夠看到:

運行結果

每一個消息隊列有兩個消費者,隊列進入了三個消息,出了三個消息,說明消息都被消費掉了,若是註釋掉消費者代碼,再次運行,而後發送消息就會發現 MessagesEnqueued 數量大於 MessagesDequeued,而後再讓消費者上線會當即消費掉隊列中的消息。

本文原創發佈於:https://www.tapme.top/blog/detail/2018-09-05-10-38

源碼:https://github.com/FleyX/demo-project/tree/master/jms_demo

相關文章
相關標籤/搜索