1. 程式人生 > >spring整合activemq傳送MQ訊息[queue模式]例項

spring整合activemq傳送MQ訊息[queue模式]例項

queue型別訊息

pom依賴

<dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-all</artifactId>
            <version>5.11.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jms</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.1.4.RELEASE</version>
        </dependency>

1、配置檔案

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置JMS連線工廠 --> <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL" value="failover:(tcp://192.168.147.131:61616)" /> </bean> <!-- 定義訊息佇列(Queue) --> <bean id="queueDestination" class
="org.apache.activemq.command.ActiveMQQueue"> <!-- 設定訊息佇列的名字 --> <constructor-arg> <value>testSpringQueue</value> </constructor-arg> </bean> <!-- 配置JMS模板(Queue),Spring提供的JMS工具類,它傳送、接收訊息。 --> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="connectionFactory" /> <property name="defaultDestination" ref="queueDestination" /> <property name="receiveTimeout" value="10000" /> </bean> </beans>

2、生產者程式碼

package com.mq.spring.queue;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;
import javax.jms.*;

/**
 * created on 2015/6/4
 * @author [email protected]
 * @version 1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mq-queue.xml"})
public class QueueSender {

    @Resource
    private JmsTemplate jmsTemplate;

    @Test
    public void send(){
        sendMqMessage(null,"spring activemq queue type message !");
    }

    /**
     * 說明:傳送的時候如果這裡沒有顯示的指定destination.將用spring xml中配置的destination
     * @param destination
     * @param message
     */
    public void sendMqMessage(Destination destination, final String message){
        if(null == destination){
            destination = jmsTemplate.getDefaultDestination();
        }
        jmsTemplate.send(destination, new MessageCreator() {
            public Message createMessage(Session session) throws JMSException {
                return session.createTextMessage(message);
            }
        });
        System.out.println("spring send message...");
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }

}

3、消費者程式碼

package com.mq.spring.queue;

import org.junit.Test;
import javax.jms.*;
import org.junit.runner.RunWith;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import javax.annotation.Resource;
import javax.jms.Message;

/**
 * created on 2015/6/4
 * @author [email protected]
 * @version 1.0
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:spring-mq-queue.xml"})
public class QueueReceiver {

    @Resource
    private JmsTemplate jmsTemplate;

    @Test
    public void receiveMqMessage(){
        Destination destination = jmsTemplate.getDefaultDestination();
        receive(destination);
    }

    /**
     * 接受訊息
     */
    public void receive(Destination destination) {
        TextMessage tm = (TextMessage) jmsTemplate.receive(destination);
        try {
            System.out.println("從佇列" + destination.toString() + "收到了訊息:\t" + tm.getText());
        } catch (JMSException e) {
            e.printStackTrace();
        }
    }

    public void setJmsTemplate(JmsTemplate jmsTemplate) {
        this.jmsTemplate = jmsTemplate;
    }
}

程式執行結果:

說明:上面的生產者和消費者使用同一套配置檔案,使用獨立的程式去接收訊息,spring jms也提供了訊息監聽處理.接下來我們換成監聽式消費

配置檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- 配置JMS連線工廠 -->
    <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="failover:(tcp://192.168.147.131:61616)" />
    </bean>

    <!-- 定義訊息佇列(Queue) -->
    <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <!-- 設定訊息佇列的名字 -->
        <constructor-arg>
            <value>testSpringQueue</value>
        </constructor-arg>
    </bean>

    <!-- 配置訊息佇列監聽者(Queue) -->
    <bean id="consumerMessageListener" class="com.mq.spring.queue.ConsumerMessageListener" />

    <!-- 訊息監聽容器(Queue),配置連線工廠,監聽的佇列是testSpringQueue,監聽器是上面定義的監聽器 -->
    <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
        <property name="connectionFactory" ref="connectionFactory" />
        <property name="destination" ref="queueDestination" />
        <property name="messageListener" ref="consumerMessageListener" />
    </bean>
    
</beans>

這樣我們的訊息消費就可以在監聽器中處理消費了.生產的程式碼不變,修改傳送者的訊息體內容,執行生產程式.可以看到執行效果如下:



相關推薦

spring整合activemq傳送MQ訊息[queue模式]例項

queue型別訊息 pom依賴 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId>

spring整合activemq傳送MQ訊息[Topic模式]例項

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSc

SPRING 整合 activemq 的 topic 模式

概要 activemq 支援兩種模式: 1.佇列模式 2. 釋出訂閱者模式,topic有一個主題可以有多個訂閱者。這種情況可以將一個訊息,分發到多個消費者。 實現程式碼 1.生產者 import java.util.Map; import javax.annotation.Resour

SPRING 整合 KAFKA 傳送訊息

準備工作 1.安裝kafka+zookeeper環境  2.利用命令建立好topic,建立一個topic my-topic 整合步驟 1.配置生產者 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=

IBM MQ 整合CXF 傳送JMS 訊息

1.修改wsdl 協議型別為 jms 替換 <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> 為 <soap:binding style="document" t

Spring整合activeMq(一):點對點模式

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:util="http://www.spring

spring 整合 activeMQ非同步傳送郵件

一、訊息佇列的作用 1、非同步處理 2、流量削峰 3、應用解耦 4、日誌處理 二、此處展示的是非同步處理場景 1、構建maven專案,此處不做多餘的說明了,匯入MQ相關的jar包,注意版本的問題,這裡費了好多時間解決衝突 <!-- MQ start--&

解決Springboot整合ActiveMQ傳送和接收topic訊息的問題

環境搭建 1.建立maven專案(jar) 2.pom.xml新增依賴 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-bo

Spring整合activeMQ消息隊列

else finally ant try 工具類 cal 創建 ransac cer 1.配置JMS <!-- Spring提供的JMS工具類,它可以進行消息發送、接收等 --> <bean id="jmsTemplate" class=

SpringBoot2.0之整合ActiveMQ(點對點模式

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/

activemq+springboot,topic+queue模式

一.maven中新增activemq依賴:         <!-- activemq -->         <dependency>        

spring整合activemq傳遞物件注意事項

初衷:兩個專案分別部署在兩臺伺服器上,專案之間以activemq傳遞object訊息 拓樸結構: 伺服器A:tomcat,專案A--生產者 伺服器B:tomcat、activemq、專案B--消費者 專案A主要程式碼 src/main/resources/ActiveMQ

淺談jms之(通過spring整合activeMQ實現jms)例項

上篇說到使用activemq 實現jms訊息服務 的例項,但是那個是沒有spring進行整合和管理的;其實spring完整提供對jms的支援,所以我們可以通過spring來管理整合activemq 實現jms訊息傳遞服務。 1.建立maven工程(我的專案都是通過maven

spring整合activemq衝突問題

由於版本比較高的activemq-all的jar包中包含了spring的一些包,這會引起包的衝突 <dependency> <groupId>org.apache.activemq</groupId> <artifact

SpringBoot2整合ActiveMQ實戰之釋出訂閱模式

1、預設消費者並不會消費訂閱釋出型別的訊息,這是由於springboot預設採用的是p2p模式進行訊息的監聽      在配置檔案裡面,註釋掉 #spring.jms.pub-sub-domain=true   2.  //需要給topi

Spring整合ActiveMQ教程

寫在前面:這篇文章會涉及二者的整合思路,為了能夠更好地讀懂本文,建議最好你能夠在不整合其他環境的情況下使用ActiveMQ編寫簡單的控制檯Demo,並且能夠了解JMS(Java Message Service)。當然,你也可以直接略過整合思路看整合的過程。 簡介 A

ActiveMQ學習(四)Spring整合ActiveMQ

因為2018年的第一場雪,比以往時候來的更晚一些,所以,本篇文章隔了近5個月才更新,抱歉來的有點晚了各位,不是人造革,皮是真的皮,啊彌陀佛,罪過罪過……本篇,將繼續跟隨以往的腳步,使用Spring MVC+ActiveMQ+Maven+Tomcat,做一個

使用spring整合的kafka收發訊息

1. 引入maven依賴 <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-kaf

spring整合rabbitMq(基於topic和fanout模式)

本文程式碼樣例都是在spring整合環境下寫的,都測試通過。 pom檔案需要加入spring整合rabbitMq的依賴: <dependency> <groupId>org.springframework

Spring整合ActiveMQ(topic 詳細配置步驟)

maven工程新增依賴<dependencies> <!-- Spring --> <dependency> <groupId>org.springframework</groupId>