ActiveMQ學習總結(3)——spring整合ActiveMQ

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

1.參考文獻

  1. Spring集成ActiveMQ配置
  2. Spring JMS異步發收消息 ActiveMQ

2.環境

在前面的一篇 ActiveMQ入門實例中我們實現了消息的異步傳送,這篇博文將如何在spring環境下集成ActiveMQ。如果要在spring下集成ActiveMQ,那么就需要將如下jar包導入項目:

本文有兩篇參考文獻,因此有兩個實例,項目結構如下圖所示:

3.實例1

信息發送者:HelloSender.java

復制代碼
package edu.sjtu.erplab.springactivemq;

import javax.jms.JMSException;
import javax.jms.Session;

import javax.jms.Destination;
import javax.jms.Message;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class HelloSender {

/**
*
@param args
* jmsTemplate和destination都是在spring配置文件中進行配制的
* Sender只使用了配置文件中的jmsFactory,jmsTemplate,還有destination這三個屬性
*/
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
JmsTemplate template = (JmsTemplate) applicationContext.getBean("jmsTemplate");
Destination destination = (Destination) applicationContext.getBean("destination");
template.send(destination, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("發送消息:Hello ActiveMQ Text Message2!");
}
});
System.out.println("成功發送了一條JMS消息");
}
}
復制代碼

信息接受者:ProxyJMSConsumer.java

復制代碼
package edu.sjtu.erplab.springactivemq;

import javax.jms.Destination;
import javax.jms.TextMessage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;

/**
* JMS消費者
* 消息題的內容定義
* 消息對象 接收消息對象后: 接收到的消息體* <p>
*/
public class ProxyJMSConsumer {

public ProxyJMSConsumer() {

}
private JmsTemplate jmsTemplate;

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

/**
* 監聽到消息目的有消息后自動調用onMessage(Message message)方法
*/
public void recive() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
Destination destination = (Destination) applicationContext.getBean("destination");
while (true) {
try {
TextMessage txtmsg = (TextMessage) jmsTemplate
.receive(destination);
if (null != txtmsg) {
System.out.println("[DB Proxy] " + txtmsg);
System.out.println("[DB Proxy] 收到消息內容為: "
+ txtmsg.getText());
} else
break;
} catch (Exception e) {
e.printStackTrace();
}

}
}

}
復制代碼

客戶端:JMSTest.java

復制代碼
package edu.sjtu.erplab.springactivemq;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class JMSTest {

/**
*
@param args
*/
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext-jms.xml");
ProxyJMSConsumer proxyJMSConsumer = (ProxyJMSConsumer) applicationContext.getBean("messageReceiver");
proxyJMSConsumer.recive();

System.out.println("初始化消息消費者");
}

}
復制代碼

Spring配置文件:applicationContext-jms.xml

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

default-autowire
="byName">


<!-- 配置connectionFactory -->
<bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
destroy-method
="stop">
<property name="connectionFactory">
<bean class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL">
<value>tcp://127.0.0.1:61616</value>
</property>
</bean>
</property>
<property name="maxConnections" value="100"></property>
</bean>

<!-- Spring JMS Template -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory">
<ref local="jmsFactory" />
</property>
<property name="defaultDestinationName" value="subject" />
<!-- 區別它采用的模式為false是p2p為true是訂閱 -->
<property name="pubSubDomain" value="true" />
</bean>

<!-- 發送消息的目的地(一個隊列) -->
<bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
<!-- 設置消息隊列的名字 -->
<constructor-arg index="0" value="subject" />
</bean>




<bean id="messageReceiver" class="edu.sjtu.erplab.springactivemq.ProxyJMSConsumer">
<!--class="edu.sjtu.erplab.springactivemq.ProxyJMSConsumer">-->
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>



</beans>
復制代碼

測試方法:首先運行JMSTest,然后運行HelloSender。

4.實例2

消息發送者:?Sender

復制代碼
package edu.sjtu.erplab.springactivemq2;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;

public class Sender {
private JmsTemplate jmsTemplate;
//getter and setter
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

public void sendInfo() {
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
MapMessage message = session.createMapMessage();
message.setString("lastName", "ppp");
return message;
}

});
}
}
復制代碼

消息發送客戶端:SenderTest

復制代碼
package edu.sjtu.erplab.springactivemq2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SenderTest {
public static void main(String[] args) {
// TODO 自動生成方法存根
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Sender sender = (Sender) context.getBean("sender");
sender.sendInfo();
}
}
復制代碼

消息接收者:Receiver

復制代碼
package edu.sjtu.erplab.springactivemq2;

import javax.jms.JMSException;
import javax.jms.MapMessage;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.support.JmsUtils;

public class Receiver {
private JmsTemplate jmsTemplate;
//getter and setter
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}

/**
* 構造函數
*/
public Receiver() {
}

public String receiveMessage() {
String my = "";
MapMessage message = (MapMessage) jmsTemplate.receive();
try {
my = message.getString("lastName");
} catch (JMSException e) {
throw JmsUtils.convertJmsAccessException(e);
}
return my;
}


}
復制代碼

消息接收客戶端:ReceiverTest

復制代碼
package edu.sjtu.erplab.springactivemq2;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class ReceiverTest {
public static void main(String[] args) {
// TODO 自動生成方法存根
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
Receiver receiver = (Receiver) context.getBean("receiver");
System.out.print(receiver.receiveMessage());
}
}
復制代碼

Spring配置文件:applicationContext.xml

復制代碼
<?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-2.0.xsd"
>
<!--創建連接工廠-->
<bean id="connectionFactory"
class
="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616"></property>
</bean>
<!-- 聲明ActiveMQ消息目標,目標可以是一個隊列,也可以是一個主題ActiveMQTopic-->
<bean id="destination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="edu.sjtu.erplab.springactivemq2"></constructor-arg>
</bean>
<!---->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"></property>
<property name="defaultDestination" ref="destination"></property>
<property name="receiveTimeout" value="600"></property>

</bean>
<bean id="sender" class="edu.sjtu.erplab.springactivemq2.Sender">
<property name="jmsTemplate" ref="jmsTemplate"></property>

</bean>
<bean id="receiver" class="edu.sjtu.erplab.springactivemq2.Receiver">
<property name="jmsTemplate" ref="jmsTemplate"></property>
</bean>
</beans>
復制代碼

轉載于:https://my.oschina.net/zhanghaiyang/blog/606519

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536377.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536377.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536377.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Pots【廣搜,模擬】

Pots POJ - 3414 You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;DROP(i) empty the pot i to the drain;POUR(i,j) pour fro…

非常可樂【廣搜,模擬】

非常可樂 HDU - 1495 大家一定覺的運動以后喝可樂是一件很愜意的事情&#xff0c;但是seeyou卻不這么認為。因為每次當seeyou買了可樂以后&#xff0c;阿牛就要求和seeyou一起分享這一瓶可樂&#xff0c;而且一定要喝的和seeyou一樣多。但seeyou的手中只有兩個杯子&#xff0…

問題 A: 深度學習

問題 A: 深度學習 時間限制: 1 Sec 內存限制: 128 MB 提交: 53 解決: 42 [提交] [狀態] [討論版] [命題人:admin] 題目描述 小 A 最近在研究深度學習&#xff0c;他自己搭建了一個很牛逼的神經網絡&#xff0c;現在他手頭一共有 n 組訓練數據&#xff0c;一開始他會給自己的…

堆樹

一、堆樹的定義 堆樹的定義如下&#xff1a; &#xff08;1&#xff09;堆樹是一顆完全二叉樹&#xff1b; &#xff08;2&#xff09;堆樹中某個節點的值總是不大于或不小于其孩子節點的值&#xff1b; &#xff08;3&#xff09;堆樹中每個節點的子樹都是堆樹。 當父節點的鍵…

問題 D: 最小生成樹II

問題 D: 最小生成樹II 時間限制: 1 Sec 內存限制: 128 MB 提交: 89 解決: 44 [提交] [狀態] [討論版] [命題人:admin] 題目描述 小A有一張n個點的帶權無向圖&#xff0c;這張無向圖非常特別&#xff0c;首先第i個點有一個點權ai&#xff0c;之后這張無向圖是一張完全圖&…

問題 G: 區間權值

問題 G: 區間權值 時間限制: 1 Sec 內存限制: 128 MB 提交: 112 解決: 49 [提交] [狀態] [討論版] [命題人:admin] 題目描述 小Bo有n個正整數a1..an&#xff0c;以及一個權值序列w1…wn&#xff0c;現在他定義 現在他想知道的值&#xff0c;需要你來幫幫他 你只需要輸出答案…

問題 I: 連通塊計數

問題 I: 連通塊計數 時間限制: 1 Sec 內存限制: 128 MB 提交: 108 解決: 45 [提交] [狀態] [討論版] [命題人:admin] 題目描述 小A有一棵長的很奇怪的樹&#xff0c;他由n條鏈和1個點作為根構成&#xff0c;第i條鏈有ai個點&#xff0c;每一條鏈的一端都與根結點相連。 現在…

telnet 功能啟用并測試端口是否正常

記錄日期&#xff1a;2019年6月21日 13點52分 操作系統&#xff1a;Windows 10 由于 Ping命令可以檢查網絡是否連通&#xff0c;但無法準確判斷某個端口是否連通&#xff0c;因此需要使用 Telnet協議。 1、打開控制面板中的程序和功能。 2、側邊欄&#xff0c;啟用或關閉Window…

步步為營 SharePoint 開發學習筆記系列 七、SharePoint Timer Job 開發

概要 項目需求要求我們每天晚上同步員工的一些信息到sharepoint 的user List &#xff0c;我們決定定制開發sharepoint timer Job,Sharepoint timer Job是sharePoint的定時作業Job,需要安裝、布曙到服務器上,而這里我只是介紹下Job開發的例子&#xff0c;以供大家學習用。 開發…

問題 J: 尋找復讀機【模擬】

問題 J: 尋找復讀機 時間限制: 1 Sec 內存限制: 128 MB 提交: 131 解決: 50 [提交] [狀態] [討論版] [命題人:admin] 題目描述 某個QQ群里一共有n個人&#xff0c;他們的編號是1..n&#xff0c;其中有一些人本質上是復讀機。 小A發現&#xff0c;如果一個人的本質是復讀機&…

windows下jenkins常見問題填坑

沒有什么高深的東西&#xff0c;1 2天的時間大多數人都能自己摸索出來&#xff0c;這里將自己遇到過的問題分享出來避免其他同學再一次挖坑. 目錄 1. 主從節點 2. Nuget自動包還原 3. powershell部署 4. 內網機器實現基于變化的構建 5. Github私有項目pull時限 所謂主從&#x…

Cow Contest【最短路-floyd】

Cow Contest POJ - 3660 N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the competitors. …

【學習Android NDK開發】Type Signatures(類型簽名)

類型簽名&#xff08;Type Signatures&#xff09; (<Parameter 1 Type Code>[<Parameter 1 Class>];...)<Return Type Code> The JNI uses the Java VM’s representation of type signatures. Following Table shows these type signatures. Type Signatur…

Symantec(賽門鐵克)非受管檢測

為了查找局域網內沒有安裝賽門鐵克客戶端的IP&#xff0c;采用Symantec Endpoint Protect Manager 的非受管檢測機制進行網段掃描。 非受管檢測機制的原理是&#xff1a;每臺電腦開機時都會向同網段電腦發arp&#xff0c;當非受管檢測器接到arp請求時&#xff0c;會寫入本地的a…

SQL語句性能優化操作

1、對查詢進行優化&#xff0c;應盡量避免全表掃描&#xff0c;首先應考慮在where及order by涉及的列上建立索引。 2、應盡量避免在where子句中對字段進行null值判斷&#xff0c;創建表時NULL是默認值&#xff0c;但大多數時候應該使用NOT NULL&#xff0c;或者使用一個特殊的值…

sql語言特殊字符處理

我們都知道SQL Server查詢過程中&#xff0c;單引號“”是特殊字符&#xff0c;所以在查詢的時候要轉換成雙單引號“”。但這只是特殊字符的一個&#xff0c;在實際項目中&#xff0c;發現對于like操作還有以下特殊字符&#xff1a;下劃線“_”&#xff0c;百分號“%”&#xf…

小節

算法導論已學兩部分&#xff0c;第一部分是基礎知識&#xff0c;第二部分是排序。基礎知識介紹如何分析證明算法以及求時間復雜度。第二部分的排序學了很長時間。先是從簡單排序到復雜排序的一個過渡&#xff0c;打開了很多思路。然后就是無盡的算法分析。算法分析的時間比理解…

SPS2003升級到MOSS2007相關資料及問題總結

這幾天要把客戶的SPS2003門戶升級到MOSS2007的&#xff0c;客戶SPS2003門戶&#xff0c;數據26G&#xff0c;使用了自定義WebPart、自定義頁面、SSO等功能。升級過程中碰到大量問題。其中主要的問題有幾個&#xff0c;在這里把它們整理一下> 1、sps2003升級時&#xff0c;升…

Milking Time【動態規劃-dp】

Milking Time POJ - 3616 Bessie is such a hard-working cow. In fact, she is so focused on maximizing her productivity that she decides to schedule her next N (1 ≤ N ≤ 1,000,000) hours (conveniently labeled 0..N-1) so that she produces as much milk as po…

HTTP首部(1)

1、報文首部 HTTP協議的請求和響應必定包含HTTP首部&#xff0c;它包括了客戶端和服務端分別處理請求和響應提供所需要的信息。報文主體字兒是所需要的用戶和資源的信息都在這邊。  HTTP請求報文組成 方法&#xff0c;URL&#xff0c;HTTP版本&#xff0c;HTTP首部字段 HTTP響…