JBoss中的消息驱动bean

首先我们来解释一下什么叫做JMS,如下:


接下来我们来介绍一下相关概念:





代码的编写正式开始,首先新建一个工程,具体步骤不多说啦,记得要把JBoss中的JAR包关联到工程中。然后配置一个目标地址,如下:


来看看具体的代码:

<mbean code="org.jboss.mq.server.jmx.Queue"
        name="jboss.mq.destination:service=Queue,name=itcastQueue"><!-- name 为目标地址的名称 -->
        <attribute name="JNDIName">queue/itcastQueue</attribute><!-- JNDI名称的格式是确定的 -->
        <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
    </mbean>
然后,我们要把jndi.properties属性文件拷贝到此工程中,开始编写消息生成器,代码如下:

package com.zlb.app;

import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.naming.InitialContext;

public class QueueSender {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			//得到JNDI初始化上下文
			InitialContext initialContext = new InitialContext();
			//根据上下文查找一个连接工厂QueueConnectionFactory.
			//该连接工厂是由JMS提供的,不需我们自己创建,每个厂商
			//都为它绑定了一个全局的JNDI,我们通过全局的JNDI便可获取
			QueueConnectionFactory factory = (QueueConnectionFactory)initialContext.lookup("ConnectionFactory");
			//从连接工厂得到一个连接
			QueueConnection conn = factory.createQueueConnection();
			//通过连接来创建一个会话
			QueueSession session = (QueueSession) conn.createSession(false, QueueSession.AUTO_ACKNOWLEDGE);//建立不需要事务的并且能自动确认消息已接受的会话
			//根据目标地址配置文件中的JNDI名称查找目标地址
			Destination destination = (Destination) initialContext.lookup("queue/itcastQueue");
			//根据会话以及目标地址来建立消息生产者(QueueSender和TopicPublisher都扩展自MessageProducer接口)
			MessageProducer producer = session.createProducer(destination);
			//消息生产者发送消息
			producer.send(session.createTextMessage("您好,Queue"));
			session.close();
			conn.close();
			System.out.println("Queue发送成功...");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}
关于QueueConnectionFactory中的全局JNDI的值我们可以根据下面的图片去查找:





再编写一下消息使用者,方法如下:


代码为:

package com.zlb.msg;

import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

@MessageDriven(activationConfig=
{
	@ActivationConfigProperty(propertyName="destinationType",
			propertyValue="javax.jms.Queue"),
	@ActivationConfigProperty(propertyName="destination",
			propertyValue="queue/itcastQueue"),
	@ActivationConfigProperty(propertyName="acknowledgeMode",
			propertyValue="Auto-acknowledge")
})
public class MessageDrivenBean implements MessageListener{

	@Override
	public void onMessage(Message message) {
		TextMessage msg = (TextMessage)message;
		try {
			System.out.println(msg.getText());
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}
最后,再通过ANT编译一下即可,关于ANT的书写可以去参考: http://blog.csdn.net/zlb824/article/details/7067113,得到的结果为:


上面是PTP的消息传递模型,还有一种叫做Pub/Sub的消息传递模型在这里就不做详细介绍,方法很简单,只要把所有的Queue改为Topic即可!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值