1. 程式人生 > >SpringBoot整合ActiveMQ,看這篇就夠了

SpringBoot整合ActiveMQ,看這篇就夠了

ActiveMQ是Apache提供的一個開源的訊息系統,完全採用Java來實現,因此它能很好地支援JMS(Java Message Service,即Java訊息服務)規範;本文將詳細介紹下ActiveMq的安裝、與SpringBoot整合傳送佇列訊息、傳送主題訊息的的過程。

本文目錄

一、Linux下ActiveMQ安裝1.下載並解壓2.執行3.進入管理介面二、傳送佇列訊息三、傳送主題訊息

一、Linux下ActiveMQ安裝

1.下載並解壓

wget https://mirrors.tuna.tsinghua.edu.cn/apache//activemq/5.15.9/apache-activemq-5.15.9-bin.tar.gz
tar zxvf apache-activemq-5.15.9-bin.tar.gz 

2.執行

cd bin/
./activemq start

3.進入管理介面

瀏覽器訪問192.168.0.1:8161/admin/,預設使用者名稱和密碼為:admin/admin,控制檯截圖如下:

列表中資訊含義如下:

  • Number Of Pending Messages:等待消費的訊息 這個是當前未出佇列的數量。

  • Number Of Consumers:消費者 這個是消費者端的消費者數量

  • Messages Enqueued:進入佇列的訊息 進入佇列的總數量,包括出佇列的。

  • Messages Dequeued:出了佇列的訊息 可以理解為是消費這消費掉的數量。

二、傳送佇列訊息

佇列模式特點:

  1. 客戶端包括生產者和消費者。
  2. 佇列中的一個訊息只能被一個消費者使用。
  3. 消費者可以隨時取訊息。

application.properties配置如下:

#連線地址
spring.activemq.broker-url=tcp://192.168.0.1:61616
#如果是點對點(queue),那麼此處預設應該是false,如果釋出訂閱,那麼一定設定為true
spring.jms.pub-sub-domain=false

ActivemqConfig.java配置:

/**
 * 點對點
 */
@Bean
public Queue queue() {
    return new ActiveMQQueue("active.queue");
}

訊息生產者SendController.java傳送程式碼如下:

/*
 * 傳送 佇列訊息
 */
@RequestMapping("/sendQueue")
public String sendQueue() {
    String message = UUID.randomUUID().toString();
    // 指定訊息傳送的目的地及內容
    this.jmsMessagingTemplate.convertAndSend(this.queue, message);
    return "訊息傳送成功!message=" + message;
}

訊息消費者QueueCustomerController.java傳送程式碼如下:

@RestController
public class QueueCustomerController {
/*
 * 監聽和接收  佇列訊息
 */
@JmsListener(destination="active.queue")
public void readActiveQueue(String message) {
    System.out.println("接受到:" + message);
}
}

瀏覽器連續訪問:http://localhost:8080/sendQueue,訊息傳送成功,消費者接收訊息後列印的日誌如下:

接受到:51d85d31-002d-4c9b-87df-a5ea64e8d6da
接受到:1c9dab0c-1d47-4556-95dc-601c8add44fe
接受到:d199ff29-d6ff-41d2-ada0-921d636f7ed1
接受到:4d50ba07-a48a-42b6-a67e-805cdeea662c
接受到:31fc16a9-8aec-4ee6-bbb3-a0ca22c19686

三、傳送主題訊息

主題模式特點:

  1. 客戶端包括髮布者和訂閱者。
  2. 主題中的訊息可以被所有訂閱者消費。
  3. 消費者不能消費訂閱之前傳送的訊息。

application.properties中修改屬性:

spring.jms.pub-sub-domain=true

ActivemqConfig.java配置:

/**
 * 釋出/訂閱
 */
@Bean
public Topic topic() {
    return new ActiveMQTopic("active.topic");
}

訊息生產者SendController.java傳送程式碼如下:

/*
 * 傳送 主題訊息
 */
@RequestMapping("/sendTopic")
public String sendTopic() {
    String message = UUID.randomUUID().toString();
    // 指定訊息傳送的目的地及內容
    this.jmsMessagingTemplate.convertAndSend(this.topic, message);
    return "訊息傳送成功!message=" + message;
}

新增兩個訊息消費者,TopicCustomerController.java程式碼如下:

/*
 * 監聽和接收  主題訊息1
 */
@JmsListener(destination = "active.topic")
public void readActiveTopic1(String message) {
    System.out.println("Customer1接受到:" + message);
}

/*
 * 監聽和接收  主題訊息2
 */
@JmsListener(destination = "active.topic")
public void readActiveTopic2(String message) {
    System.out.println("Customer2接受到:" + message);
}

瀏覽器連續訪問:http://localhost:8080/sendTopic,訊息傳送成功,兩個消費者接收訊息後列印的日誌如下:

Customer1接受到:96c674b7-a310-487b-8088-2c5d049cfabf
Customer2接受到:96c674b7-a310-487b-8088-2c5d049cfabf
Customer1接受到:fee4fde8-6cbe-4d08-b179-e9462f6f1e74
Customer2接受到:fee4fde8-6cbe-4d08-b179-e9462f6f1e74
Customer1接受到:05d79335-ff33-41ec-ba13-a6f5c9d5bba0
Customer2接受到:05d79335-ff33-41ec-ba13-a6f5c9d5bba0
Customer1接受到:f8244df3-5504-478b-b86e-77823ab34dac
Customer2接受到:f8244df3-5504-478b-b86e-77823ab34dac

推薦閱讀
1.編碼神器Lombok,學會後開發效率至少提高一倍!
2.Spring Boot配置過濾器的兩種方式
3.Spring Boot統一異常處理實戰
4.從技術的角度分析下為什麼不要在網上發“原圖”
5.Spring Boot之Profile--快速搞定多環境使用與切換


限時領取免費Java相關資料,涵蓋了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo/Kafka、Hadoop、Hbase、Flink等高併發分散式、大資料、機器學習等技術。
關注下方公眾號即可免費領取:

Java碎碎念公眾號