首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Spring 整合 ActiveMQ 完整實戰:點對點、發布訂閱、監聽器、壓力測試

     編輯:Java 相關知識

專案架構

  • IDE:IntelliJ IDEA + Maven
  • 技術棧:Spring 4.1.8 + ActiveMQ 5.12.1 + Tomcat 7 Maven Plugin
  • 模型:Point-to-Point (Queue) 與 Pub/Sub (Topic)

關鍵配置

pom.xml 核心依賴

<properties><springframework>4.1.8.RELEASE</springframework></properties>
<dependencies>
  <!-- Spring core, context, tx, webmvc, jms -->
  <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-core</artifactId><version>5.7.0</version></dependency>
  <dependency><groupId>org.apache.activemq</groupId><artifactId>activemq-pool</artifactId><version>5.12.1</version></dependency>
  <dependency><groupId>org.apache.xbean</groupId><artifactId>xbean-spring</artifactId><version>3.16</version></dependency>
</dependencies>

applicationContext-ActiveMQ.xml

<amq:connectionFactory id="amqConnectionFactory"
    brokerURL="tcp://192.168.148.128:61616" userName="admin" password="admin" />

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <constructor-arg ref="amqConnectionFactory" />
    <property name="sessionCacheSize" value="100" />
</bean>

<bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
    <constructor-arg value="JayceQueue" />
</bean>

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="defaultDestination" ref="queueDestination" />
    <property name="pubSubDomain" value="false" /> <!-- false=Queue, true=Topic -->
</bean>

<!-- 監聽器容器 -->
<bean id="queueListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="connectionFactory" ref="connectionFactory" />
    <property name="destination" ref="queueDestination" />
    <property name="messageListener" ref="queueMessageListener" />
</bean>

核心程式碼

生產者服務

@Service
public class ProducerService {
    @Resource JmsTemplate jmsTemplate;
    public void send(String msg) {
        jmsTemplate.send(session -> session.createTextMessage(msg));
    }
}

消費者服務(手動接收)

@Service
public class ConsumerService {
    @Resource JmsTemplate jmsTemplate;
    public TextMessage receive(Destination dest) {
        return (TextMessage) jmsTemplate.receive(dest);
    }
}

訊息監聽器(自動非同步消費)

@Component
public class QueueMessageListener implements MessageListener {
    @Override public void onMessage(Message msg) {
        TextMessage tm = (TextMessage) msg;
        System.out.println("收到訊息:" + tm.getText());
        // 處理業務邏輯...
    }
}

Controller 測試端點

@RestController
public class MessageController {
    @Resource ProducerService producer;
    @Resource ConsumerService consumer;
    @Resource Destination queueDestination;

    @PostMapping("/send") public void send(@RequestParam String msg) { producer.send(msg); }
    @GetMapping("/receive") public TextMessage receive() { return consumer.receive(queueDestination); }
}

壓力測試

使用 HttpClient 多執行緒持續發送 POST 請求,觀察 ActiveMQ 管理後台訊息吞吐量與消費延遲。

原始碼

GitHub:https://github.com/jaycekon/Crawl-Page

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved