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

ActiveMQ + Spring 整合完整配置指南:Queue/Topic、監聽器、發送者、Maven 依賴

     編輯:Java 綜合教學

1. 屬性檔 (test.properties)

jms_url=tcp://127.0.0.1:61616
jms_test_monitor_data_queue=test_queue

2. Spring XML 配置 (applicationContext-jms.xml)

<beans xmlns="https://www.springframework.org/schema/beans"
       xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
       xmlns:amq="https://activemq.apache.org/schema/core"
       xmlns:jms="https://www.springframework.org/schema/jms"
       xsi:schemaLocation="...省略...">

    <!-- 載入屬性檔 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="classpath:propertiesConfig/test.properties"/>
    </bean>

    <!-- ActiveMQ 連線工廠 -->
    <bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <constructor-arg value="${jms_url}"/>
        <property name="useAsyncSend" value="true"/>
    </bean>

    <!-- Spring 緩存連線工廠 -->
    <bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <constructor-arg ref="amqConnectionFactory"/>
        <property name="sessionCacheSize" value="20"/>
    </bean>

    <!-- Queue 模板 -->
    <bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
        <constructor-arg ref="connectionFactory"/>
        <property name="pubSubDomain" value="false"/>
    </bean>

    <!-- Topic 模板 -->
    <bean id="jmsTopicTemplate" class="org.springframework.jms.core.JmsTemplate">
        <constructor-arg ref="connectionFactory"/>
        <property name="pubSubDomain" value="true"/>
    </bean>

    <!-- 監聽器容器 (Queue) -->
    <bean id="testMessageReceiver" class="com.maven.project.web.jmsMessageOper.TestMonitorQueue"/>
    <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory"/>
        <property name="destinationName" value="${jms_test_monitor_data_queue}"/>
        <property name="messageListener" ref="testMessageReceiver"/>
    </bean>
</beans>

3. 訊息監聽器 (Queue)

package com.maven.project.web.jmsMessageOper;

import javax.jms.*;

public class TestMonitorQueue implements MessageListener {
    @Override
    public void onMessage(Message message) {
        if (message instanceof TextMessage) {
            try {
                System.out.println("收到訊息:" + ((TextMessage) message).getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
}

4. 訊息發送者 (支援 Text/Object/Map/Bytes/Stream)

package com.maven.project.web.jmsMessageOper;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Controller;

import javax.jms.*;
import java.io.Serializable;
import java.util.Map;

@Controller
public class MessageSender {
    @Autowired
    private JmsTemplate jmsQueueTemplate;

    public void sendTextMessage(final String queue, final String text) {
        jmsQueueTemplate.send(queue, session -> session.createTextMessage(text));
    }

    public void sendObjectMessage(final String queue, final Serializable obj) {
        jmsQueueTemplate.send(queue, session -> session.createObjectMessage(obj));
    }

    public void sendMapMessage(final String queue, final Map<String, Object> map) {
        jmsQueueTemplate.send(queue, session -> {
            MapMessage msg = session.createMapMessage();
            map.forEach(msg::setObject);
            return msg;
        });
    }
    // sendByteMessage / sendStreamMessage 略
}

5. Controller 調用發送

@Controller
@RequestMapping("/user")
public class UserLoginAction {
    @Autowired
    private MessageSender messageSender;

    @RequestMapping("/login")
    public void login(HttpServletRequest req, HttpServletResponse resp) {
        messageSender.sendTextMessage("test_queue", "登入測試訊息");
    }
}

6. Maven 依賴

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-core</artifactId>
    <version>5.7.0</version>
</dependency>

注意: ActiveMQ 5.x 建議使用 activemq-client + activemq-broker 或 activemq-all;Spring 4.x 對應 spring-jms 4.x 版本。

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