JBSSMQ

由于最近的项目中使用了JBOSSMQ,之前没有接触过这方面的知识,所以记录下相关的笔记。

 

JBOSSMQ 是Jboss message 的简称,目前最新的jbossMQ已经修改为jboss message了最新的版本以为2.0。

 

在JMS中有两种域:topics 和queues 。一个消息发送到一个topics ,可以有多个客户端。用topic发布允许一对多,或多对多通讯通道。消息的产生者被叫做publisher, 消息接受者叫做subscriber。
queue 是另外一种方式,仅仅允许一个消息传送给一个客户。一个发送者将消息放在消息队列中,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能在得到它。
为了能发送和接收消息,必须得到一个JMS连接。该连接是使用JMS Provider得到连接的,在得到连接之后,建立一个会话(Session)。然后再建立publisher/sender 来发送消息或subscriber/receiver来接收消息。

 

JBOSSMQ框架基本流程如下:

 

消息发送端

 

1.初始化JNDI上下文对象,首先设置JNDI相关的属性

  Properties props = new Properties();
  props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
    "org.jnp.interfaces.NamingContextFactory");
  props.setProperty(Context.PROVIDER_URL, jmsUrl);//jmsurl是访问地址
  props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming");

 Context context = new InitialContext(props);

 

2. // 根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory
   // (有两种连接工厂,根据是topic/queue来使用相应的类型);

 QueueConnectionFactory queueFactory = (QueueConnectionFactory) context
     .lookup("/ConnectionFactory");

 

3.//从连接工厂得到一个连接(Connect 有两种[TopicConnection/ QueueConnection]);

  QueueConnection  queueConnection = queueFactory.createQueueConnection();

 

配置的连接的工厂都可以在${JBOSS_HOME}/server/default/conf目下的jboss-service.xml文件中。

 

4.//通过连接来建立一个会话(Session)

 QueueSession queueSession = queueconnection.createQueueSession  (false,QueueSession.AUTO_ACKNOWLEDGE);

 

5.查找目的地(Topic/ Queue)

  Queue queue = (Queue) context.lookup("/queue/testqueue");

 

6.根据会话以及目的地来建立消息制造者(TopicPublisher/QueueSender)和消费者(TopicSubscriber/ QueueReceiver)

  QueueSender  queueSender = queueSession.createSender(queue);

 

7.创建消息

TextMessage textMessage = queueSession.createTextMessage();

 

8. 发送消息

queueSender.send(queue,message);

 

消息接收端

 

消息接收端和消息的发送端前5步的步骤都一样,不同的是6-8的步骤不一样,具体如下:

 

// 根绝会话以及目的地建立消息接收者QueueReceiver

 QueueReceiver queueReceiver = queueSession.createReceiver(queue);

 

// 设置队列消息监听
 queueReceiver.setMessageListener(this);

 

//获取消息

TextMessage textMessage = (TextMessage) message;

String str = textMessage.getText();

 

其次我们在开发jms是要注意及时的释放资源,防止资源泄漏问题。

 

在开发jms客户端时需要实现ExceptionListener和MessageListener接口,其中MessageListener中包含了onMessage方法用于处理消息内容,而ExceptionListener中的onException用于当jms出现异常时,进行关闭queueConnection连接。

eg:public void onException(JMSException arg0) {
  stopRegisterConnect();
 }

 public synchronized void stopRegisterConnect() {
  try {
   if (null != queueConnection) {
    queueConnection.close();
   }
   if (null != queueSession) {
    queueSession.close();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
  queueConnection = null;
 }

 

 

接下来我们需要进行jboss配置,这里采用的jboss4.2.3的版本进行配置。

 

a.添加目的

进入${JBOSS_HOME}/server/default/deploy/jms 中的jbossmq-destinations-service.xml文件

 

 <mbean code="org.jboss.mq.server.jmx.Queue"
  name="jboss.mq.destination:service=Queue,name=testqueue">
    <depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
 </mbean>

 

其中新增的目的的名称(name)与步骤5中的名称保持一致。 这种方式是配置的目的是长期存在的,不会随jboss的关闭和消失。

 

b.jms端口配置

${JBOSS_HOME}/server/default/conf 下的jboss-service.xml文件找到配置连接工厂的上下文,设置相关的端口即可。

<mbean code="org.jboss.naming.NamingService"
      name="jboss:service=Naming"
      xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
      <attribute name="Port">17299</attribute>
</mbean>

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值