`
aqbbsxiao
  • 浏览: 46457 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

与IBM MQ收发消息例子

 
阅读更多
用Websphere MQ自带的工具包通过与Spring整合向Websphere MQ发消息,并通过listener接收消息的例子

首先第一步就是配置一个websphere MQ,这个就不多说了,不会的就去找技术文章看看
然后是spring的配置文件:applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//Spring//DTD Bean//EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">

<!-- Application Context -->
<beans>

	<bean id="jmsConnectionFactory"
		class="com.ibm.mq.jms.MQQueueConnectionFactory">
		<property name="transportType">
			<value>1</value><!-- com.ibm.mq.jms.JMSC.MQJMS_TP_CLIENT_MQ_TCPIP -->
		</property>
		<property name="queueManager">
			<value>***</value>
		</property>
		<property name="hostName">
			<value>***</value>
		</property>
		<property name="port">
			<value>1414</value>
		</property>
		<property name="channel">
			<value>***</value>
		</property>

	</bean>

	<!-- MQ sender queue setup -->
	<bean id="senderQueue" class="com.ibm.mq.jms.MQQueue">
		<constructor-arg value="TEST" />
		<property name="baseQueueManagerName">
			<value>***</value>
		</property>
		<property name="baseQueueName">
			<value>***</value>
		</property>
	</bean>

	<!-- MQ receiver queue setup -->
	<bean id="receiverQueue" class="com.ibm.mq.jms.MQQueue">
		<constructor-arg value="TESTGUI" />
		<property name="baseQueueManagerName">
			<value>***</value>
		</property>
		<property name="baseQueueName">
			<value>***</value>
		</property>
	</bean>

	<!-- the JMSTemplate102 setup for Sender Queue-->

	<bean id="SenderJMSTemplate"
		class="org.springframework.jms.core.JmsTemplate102 ">
		<property name="connectionFactory">
			<ref bean="jmsConnectionFactory" />
		</property>
		<property name="pubSubDomain">
			<value>false</value>
		</property>
		<property name="defaultDestination">
			<ref bean="senderQueue" />
		</property>
	</bean>

	<!-- the JMSTemplate102 setup for Receiver Queue -->

	<bean id="ReceiverJMSTemplate"
		class="org.springframework.jms.core.JmsTemplate102 ">
		<property name="connectionFactory">
			<ref bean="jmsConnectionFactory" />
		</property>
		<property name="pubSubDomain">
			<value>false</value>
		</property>
		<property name="defaultDestination">
			<ref bean="receiverQueue" />
		</property>
	</bean>


	<bean id="jmsSender" class="springexample.client.JMSSender">
		<property name="jmsTemplate102" ref="SenderJMSTemplate" />
		<property name="replyTo" ref="senderQueue" />
		<property name="msgheader">
			<props>
				<prop key="EVENTNAME">****</prop>
				<prop key="WIRECENTER">***</prop>
				<prop key="DESTINATION">***</prop>
				<prop key="embusMessagingMode">***</prop>
				<prop key="CLIENTID">***</prop>
				<prop key="USERID">***</prop>
				<prop key="GROUPID">***</prop>
				<prop key="embusApplicationID">***</prop>
				<prop key="embusLoggingKey">***</prop>
				<prop key="USERID">***</prop>
				<!-- below is for message selector -->
				<prop key="messageSelector">***</prop>
			</props>
		</property>

	</bean>

	<bean id="jmsReceiver" class="springexample.client.JMSReceiver">
		<property name="jmsTemplate102">
			<ref bean="ReceiverJMSTemplate" />
		</property>

		<property name="receiveQueue">
			<ref bean="receiverQueue" />
		</property>

	</bean>

	<bean
		class="org.springframework.jms.listener.DefaultMessageListenerContainer102">
		<property name="connectionFactory" ref="jmsConnectionFactory" />
		<property name="destination" ref="receiverQueue" />
		<property name="messageListener" ref="jmsReceiver" />
		<property name="concurrentConsumers" value="1" />
 		<property name="messageSelector" value="messageSelector = '***'" />
	</bean>

</beans>


然后是发消息的JMSSender.java
/*
 * Created on Feb 3, 2012
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */

/**
 * @author xiaozurun
 * 
 * TODO To change the template for this generated type comment go to Window -
 * Preferences - Java - Code Style - Code Templates
 */
package springexample.client;

import java.util.Iterator;
import java.util.Properties;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.jms.core.JmsTemplate102;
import org.springframework.jms.core.MessageCreator;

public class JMSSender {

	private JmsTemplate102 jmsTemplate102;

	private Properties msgheader;

	private Destination replyTo;

	public JmsTemplate102 getJmsTemplate102() {
		return jmsTemplate102;
	}

	public void setJmsTemplate102(JmsTemplate102 jmsTemplate102) {
		this.jmsTemplate102 = jmsTemplate102;
	}

	/**
	 * @return Returns the msgheader.
	 */
	public Properties getMsgheader() {
		return msgheader;
	}

	/**
	 * @param msgheader The msgheader to set.
	 */
	public void setMsgheader(Properties msgheader) {
		this.msgheader = msgheader;
	}

	/**
	 * @return Returns the replyTo.
	 */
	public Destination getReplyTo() {
		return replyTo;
	}

	/**
	 * @param replyTo The replyTo to set.
	 */
	public void setReplyTo(Destination replyTo) {
		this.replyTo = replyTo;
	}

	public void sendMesage() {

		//System.out.println(sendQueue.getBaseQueueName());

		jmsTemplate102.send(replyTo, new MessageCreator() {
			public Message createMessage(Session session) throws JMSException {
				String strInput = "";
				try {
					strInput = util.getString("facs.xml");
					System.out.println("send message: " + strInput);
				} catch (Exception e) {

				}
				Message message = session.createTextMessage(strInput);
				Iterator it = msgheader.keySet().iterator();
				System.out.println("Print message header property:");
				while (it.hasNext()) {
					String key = (String) it.next();
					message.setStringProperty(key, msgheader.getProperty(key));
					System.out.print("(" + key + " : "+ msgheader.getProperty(key) + ")\t");
				}
				message.setStringProperty("TAFIFlag", "1234567890");
				message.setJMSReplyTo(replyTo);
				return message;
			}
		});

	}

}


未完。。。

接着上面写,message sender写完了,现在剩下收消息了。应为我们在spring里配置了是通过listener来监听这个queue的,所以当消息来了,listener就会激活receive里的onmessage方法来收消息。下面是code;
JMSReceiver.java  实现了MessageListener

package springexample.client;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

import org.springframework.jms.core.JmsTemplate102;

import com.ibm.mq.jms.MQQueue;


public class JMSReceiver implements MessageListener {
	
	private JmsTemplate102 jmsTemplate102;
	
	private MQQueue receiveQueue;
	/**
	 * @return Returns the jmsTemplate102.
	 */
	public JmsTemplate102 getJmsTemplate102() {
		return jmsTemplate102;
	}
	/**
	 * @param jmsTemplate102 The jmsTemplate102 to set.
	 */
	public void setJmsTemplate102(JmsTemplate102 jmsTemplate102) {
		this.jmsTemplate102 = jmsTemplate102;
	}
	
	/**
	 * @return Returns the receiveQueue.
	 */
	public MQQueue getReceiveQueue() {
		return receiveQueue;
	}
	/**
	 * @param receiveQueue The receiveQueue to set.
	 */
	public void setReceiveQueue(MQQueue receiveQueue) {
		this.receiveQueue = receiveQueue;
	}
	
	public void onMessage(Message message) {
		try {
			System.out.println("reviced msg is:" +(new java.util.Date())+":"+ ((TextMessage)message).getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}
	
	public void processMessage(){
		System.out.println("Start to receive message");
		Message msg = jmsTemplate102.receive(receiveQueue.getBaseQueueName());
		try{
			TextMessage textMessage = (TextMessage) msg;
			if( msg!=null){
				System.out.println(" Message Received -->" + textMessage.getText());
			} else {
				System.out.println(" there is no message in the Queue :" + receiveQueue.getBaseQueueName());
			}
			
		}catch(Exception e){
				e.printStackTrace();
		}
		
	}

}



ok,以上就是整个的收发了。
分享到:
评论
4 楼 aqbbsxiao 2013-02-28  
weiqiulai 写道
楼主,你好!有个问题,你的jms监控的是另外一台服务器上的mq队列吗?我在本机安装了MQ并建立了和服务器一样的队列管理器和队列,当我启动应用服务的时候,它自动监控的是我本机的队列,监控不到远程服务器的队列啊??

没有,这个监听的都是同一个服务器上的mq队列,要监听到远程服务器队列,估计要做其他的设置。最近在搞ios开发,有时间我研究下再回答你。
3 楼 weiqiulai 2012-12-10  
楼主,你好!有个问题,你的jms监控的是另外一台服务器上的mq队列吗?我在本机安装了MQ并建立了和服务器一样的队列管理器和队列,当我启动应用服务的时候,它自动监控的是我本机的队列,监控不到远程服务器的队列啊??
2 楼 aqbbsxiao 2012-09-13  
额。。。很久没上来了。。都忘了这个没写完。。
1 楼 Jophy 2012-04-02  
楼主 期待后面的  感谢!

相关推荐

    jms远程IBM MQ 收发消息

    本教程将深入探讨如何使用JMS客户端模式来实现与IBM MQ的远程通信,包括同步和异步的消息收发处理。 首先,理解JMS的基本概念至关重要。JMS提供两种主要的消息模型:点对点(Point-to-Point,P2P)和发布/订阅...

    JAVA IBM MQ 接收、发送

    本篇文章将深入探讨如何使用Java API与IBM MQ进行交互,包括接收和发送消息的实例。 首先,我们需要理解IBM MQ的基本概念。MQ系列是IBM提供的消息队列服务,它通过消息模型实现了应用之间的解耦。消息队列允许应用...

    C# 实现消息的收发IBM WebSphere MQ 消息队列

    在本文中,我们将深入探讨如何使用C#编程语言与IBM WebSphere MQ进行交互,实现消息的发送和接收。IBM WebSphere MQ(前身为MQSeries)是一种企业级的消息中间件,它提供了一种可靠且可扩展的方式,使得应用程序可以...

    C#操作IBM Websphere MQ收发消息

    当我们需要在C#应用中集成IBM WebSphere MQ以实现消息收发时,以下是一些关键知识点: 1. **IBM WebSphere MQ简介**:WebSphere MQ提供了一个可靠的、跨平台的消息传递系统,支持多种编程语言和操作系统。它通过...

    与远程的IMB MQ收发消息的例子

    通过IBM websphere MQ自带的工具包向远程的Websphere MQ收发消息的代码(包括MQ的lib包都有) 亲测,可用

    C#实现IBM WebSphere MQ 消息收发例子

    C#实现IBM WebSphere MQ 消息收发例子 参考文章: https://www.codeproject.com/Articles/12198/IBM-WebSphere-MQ-with-C-GUI-application-that-is-bo ...

    IBM WebSphere MQ消息持久化

    IBM WebSphere MQ是IBM公司开发的消息中间件产品,它能够保证消息在分布式系统中的可靠传递。在IBM WebSphere MQ中,消息持久化是一个重要的特性,它确保了当队列管理器发生异常时,消息数据的安全性和一致性。以下...

    IBM MQ将消息发送至远程队列

    ### IBM MQ将消息发送至远程队列的知识点详解 #### 一、安装MQ IBM MQ的安装过程是在两台不同的主机上进行的。首先需要确保介质目录已经准备好,并且能够执行安装所需的命令。 ##### 安装步骤: 1. **接受...

    mq.rar_MQ_ibm mq 实例代码_ibm mq 文件传输_ibm mqput怎么用_put

    IBM MQ,全称为IBM Message Queue,是IBM提供的一款企业级的消息中间件,它允许应用程序通过消息传递进行异步通信,增强了系统的可靠性和可扩展性。本文将深入解析MQ的使用,特别是IBM MQ的实例代码、文件传输以及`...

    IBMMQ测试工具

    在这个场景中,我们关注的是“IBMMQ测试工具”,尤其是名为`rfhutil`的工具。 **rfhutil工具介绍** `rfhutil`是IBM MQ工具集的一部分,主要用于测试和调试IBM MQ消息队列。这个命令行工具可以帮助用户创建、查看、...

    JMETER插件,进行IBM MQ测试

    IBM MQ,原名WebSphere MQ,是IBM提供的一种消息中间件,它允许应用程序在不同的网络、操作系统和应用程序之间可靠地传输数据。通过IBM MQ,可以实现异步通信,提高系统的可扩展性和容错性。 JMeter IBM MQ插件,...

    C# 实现消息的收发IBM WebSphere MQ 队列

    理解并掌握以上知识点后,开发者就能够构建出一个基本的C#应用程序,实现与IBM WebSphere MQ的消息收发功能。在实际项目中,还需要考虑更多的因素,如性能优化、错误恢复策略、安全性等,以满足复杂的企业需求。

    IBM MQ Explore windows下安装包

    IBM MQ是一种消息中间件,它提供了一种可靠、高效的方式来传输应用程序之间的数据,确保即使在网络不稳定或系统故障的情况下也能完成消息传递。队列管理器是IBM MQ的核心组件,负责处理消息的存储和转发。队列则用于...

    ibm mq 7.5开发依赖jar包

    总之,这些JAR文件构成了开发IBM MQ 7.5应用程序的基础,它们包含了与IBM MQ交互所需的各类API和功能,使得开发者能够在Java环境中实现与IBM MQ的消息通信。在实际项目中,需要根据具体需求选择合适的API,遵循最佳...

    IBM MQ 7.5.0 windows版本-全部

    IBM MQ,全称为IBM WebSphere MQ,是一款由IBM公司开发的消息中间件产品,它在企业级应用集成中扮演着至关重要的角色。IBM MQ 7.5.0是该产品的特定版本,专为Windows操作系统设计。这个版本包含了所有必要的组件和...

    IBMMQ消息队列源码

    以下是基于“IBMMQ消息队列源码”这一主题的详细知识点: 1. **消息队列概念**: - 消息队列是一种异步通信机制,它存储并转发消息,确保消息的可靠传输,即使发送方和接收方不在同一时间在线。 - IBM MQ使用队列...

    IBMMQ消息序号-顺序

    ### IBMMQ消息序号-顺序详解 #### 1. 什么是MQ的消息序号? IBM Message Queue (简称MQ) 是一种消息中间件技术,用于在分布式应用程序之间传递数据。MQ中的消息序号(Message Sequence Number)是一项重要的机制,...

    IBM MQ V8 Clients 8.0.0.8

    A IBM MQ client is part of the product that can be installed on its own, on a separate machine from the base product and server. You can run an IBM MQ application on an IBM MQ client and it can ...

    IBM MQ jdk1.7以上

    IBM MQ,全称为IBM Message Queue,是IBM...总结起来,IBM MQ是一个强大的消息中间件,提供高效、安全的数据传输服务,适应于各种复杂的企业环境,而"mq8.jar"则为使用Java语言的开发人员提供了与IBM MQ通信的接口。

    IBM MQ C++实例代码,连接MQ获取消息

    IBM MQ(原名WebSphere MQ)是IBM提供的一款企业级的消息中间件,它允许...深入研究这个文件将有助于理解IBM MQ与C++集成的具体细节。在实际开发中,还需要注意安全性、性能优化、并发处理和错误日志记录等高级话题。

Global site tag (gtag.js) - Google Analytics