MQ--spring jms配置+負載與斷線重連


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());
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM