1.依賴包
<!-- pom文件內定義配置常量 --> <properties> <springversion>5.0.6.RELEASE</springversion> </properties> <!-- 加入jms依賴 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jms</artifactId> <version>${springversion}</version> </dependency>
application.yml內定義mq連接信息
# ========= MQ相關配置 ============= # 需要重連或負載請在地址前前加上:failover://
#負載配置:failover:(tcp://localhost:61616,tcp://remotehost:61616)
#注意,如果加上failover(故障轉移),連接失敗或發送消息失敗默認會觸發重連機制,而如果沒有配置重連次數,將會無限發起重連,並且不會拋出異常,此時如果涉及業務執行就坑了,相當於卡死在這里
鏈接后加入配置可以關閉重連或自定義重連次數,但依然不會拋出異常,如果對負載沒有特殊要求,建議不加此前綴。具體配置可以參考:http://activemq.apache.org/failover-transport-reference.html activemq.broker-url: tcp://127.0.0.1:61616?jms.prefetchPolicy.queuePrefetch=1 activemq.username: admin activemq.password: admin #MQ消費者連接池連接數,視情況而定 activemq.pool.max-connections : 30
applicationContext_local.xml 加入mq配置
<!-- 真正可以產生Connection的ConnectionFactory,由對應的 JMS服務廠商提供 --> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="${activemq.broker-url}"/> <property name="userName" value="${activemq.username}"></property> <property name="password" value="${activemq.password}"></property> </bean> </property> <property name="maxConnections" value="${activemq.pool.max-connections}"/> </bean> <!-- Spring提供的JMS工具類,它可以進行消息發送、接收等 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsMessagingTemplate"> <!-- 這個connectionFactory對應的是我們定義的Spring提供的那個ConnectionFactory對象 --> <property name="connectionFactory" ref="pooledConnectionFactory"/> </bean>
消息發送類
import com.nascent.ecrpsaas.core.service.mq.base.BaseMQProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsMessagingTemplate; import org.springframework.stereotype.Component; import javax.jms.Destination; /** * ActiveMQ消息實現 * */ @Component public class ActiveMessageProducer extends BaseMQProducer { @Autowired private JmsMessagingTemplate jmsTemplate; // 發送消息,destination是發送到的隊列,message是待發送的消息 @Override public void sendMessage(Destination destination, final String message){ jmsTemplate.convertAndSend(destination, message); } // 發送消息,destination是發送到的隊列,message是待發送的消息 @Override public void sendMessage(String destination, final String message){ jmsTemplate.convertAndSend(destination, message); } }
BaseMQProducer基類
import javax.jms.Destination; /** * MQ基類 */ public abstract class BaseMQProducer { /** * 發送消息 * @param destination MQ隊列 * @param message 消息內容 */ protected abstract void sendMessage(Destination destination, final String message); /** * 發送消息 * @param destination MQ隊列名稱 * @param message 消息內容 */ public abstract void sendMessage(String destination, final String message); }
測試類(僅為展示)
import com.alibaba.fastjson.JSONObject; import com.nascent.ecrpsaas.core.service.mq.base.BaseMQProducer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class Test { @Autowired private static BaseMQProducer baseMQProducer; public static void main(String[] args) { JSONObject message = new JSONObject(); message.put("say", "hello"); baseMQProducer.sendMessage("FistQueue", message.toString()); } }