springboot整合ActiveMQ1(基本使用)
- 基本使用,https://www.tapme.top/blog/detail/2018-09-05-10-38
- 主備模式,https://www.tapme.top/blog/detail/2018-09-06-10-38
說明:acitveMQ 版本為:5.9.1,springboot 版本為 2.0.3
一. 下載安裝(windows)
官方下載地址:點我跳轉,選擇 windows 安裝包下載,然後解壓,解壓後執行 bin 目錄下的activemq.bat啟動服務,無報錯即可啟動成功。預設管理地址為:localhost:8161/admin,預設管理員賬號密碼為admin/admin。
二. springboot 整合
1. 建立 springboot 專案
建立 springboot web 專案,加入 spring-boot-starter-activemq 依賴。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-activemq</artifactId>
</dependency>
然後編輯配合檔案,加上一個配置:61616 為 activeMQ 的預設埠,暫時不做其他配置,使用預設值。
spring: activemq: broker-url: tcp://localhost:61616
2. 建立生產者消費者
springboot 中 activeMQ 的預設配置為生產-消費者模式,還有一種模式為釋出-訂閱模式後面再講。專案目錄如下:
首先編寫配置類 Config.java,程式碼如下
@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 中看到如下:
生產者 Producer.java 程式碼如下:
@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 中傳送訊息。
消費者 Comsumer.java 程式碼如下:
@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_d