jboss 7 配置 jms

    最近学习jboss7 正好以前有个jboss 6 的项目 使用了jms,就想移植到 7 下,随之google,baidu了下,都没有好的例子,于是只有看看文档了,结果文档现在还不完整,于是把问题都总结下以免忘记:
     <extension module="org.jboss.as.messaging"/> 配置消息模块
接着复制下面配置:消息队列是java:/queue/test
     <subsystem xmlns="urn:jboss:domain:messaging:1.0">
    <!-- Default journal file size is 10Mb, reduced here to 100k for faster first boot -->
    <journal-file-size>102400</journal-file-size>
    <journal-min-files>2</journal-min-files>
    <journal-type>NIO</journal-type>
    <!-- disable messaging persistence -->
    <persistence-enabled>false</persistence-enabled>

    <connectors>
       <netty-connector name="netty" socket-binding="messaging" />
       <netty-connector name="netty-throughput" socket-binding="messaging-throughput">
          <param key="batch-delay" value="50"/>
       </netty-connector>
       <in-vm-connector name="in-vm" server-id="0" />
    </connectors>

    <acceptors>
       <netty-acceptor name="netty" socket-binding="messaging" />
       <netty-acceptor name="netty-throughput" socket-binding="messaging-throughput">
          <param key="batch-delay" value="50"/>
          <param key="direct-deliver" value="false"/>
       </netty-acceptor>
        <acceptor name="stomp-acceptor">
         <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
         <param key="protocol" value="stomp" />
         <param key="port" value="61613" />
       </acceptor>
       <in-vm-acceptor name="in-vm" server-id="0" />
    </acceptors>

    <security-settings>
       <security-setting match="#">
           <permission type="createNonDurableQueue" roles="guest"/>
           <permission type="deleteNonDurableQueue" roles="guest"/>
            <permission type="consume" roles="guest"/>
            <permission type="send" roles="guest"/>
       </security-setting>
    </security-settings>

    <address-settings>
       <!--default for catch all-->
       <address-setting match="#">
          <dead-letter-address>jms.queue.DLQ</dead-letter-address>
          <expiry-address>jms.queue.ExpiryQueue</expiry-address>
          <redelivery-delay>0</redelivery-delay>
          <max-size-bytes>10485760</max-size-bytes>
          <message-counter-history-day-limit>10</message-counter-history-day-limit>
          <address-full-policy>BLOCK</address-full-policy>
       </address-setting>
    </address-settings>

    <!--JMS Stuff-->
   <jms-connection-factories>
      <connection-factory name="InVmConnectionFactory">
         <connectors>
            <connector-ref connector-name="in-vm"/>
         </connectors>
         <entries>
            <entry name="java:/ConnectionFactory"/>
         </entries>
      </connection-factory>
      <connection-factory name="RemoteConnectionFactory">
         <connectors>
            <connector-ref connector-name="netty"/>
         </connectors>
         <entries>
            <entry name="RemoteConnectionFactory"/>
         </entries>
      </connection-factory>
      <pooled-connection-factory name="hornetq-ra">
         <transaction mode="xa"/>
         <connectors>
            <connector-ref connector-name="in-vm"/>
         </connectors>
         <entries>
            <entry name="java:/JmsXA"/>
         </entries>
      </pooled-connection-factory>
   </jms-connection-factories>

   <jms-destinations>
      <jms-queue name="testQueue">
         <entry name="queue/test"/>
      </jms-queue>
      <jms-topic name="testTopic">
         <entry name="topic/test"/>
      </jms-topic>
   </jms-destinations>
</subsystem>
接着配置mdb(官方文档没有这个说明,找了半天才发现)
<subsystem xmlns="urn:jboss:domain:ejb3:1.2">
<mdb>
                <resource-adapter-ref resource-adapter-name="hornetq-ra"/>
                <bean-instance-pool-ref pool-name="mdb-strict-max-pool"/>
            </mdb>

端口配置 :

<socket-binding name="messaging" port="5445" />
<socket-binding name="messaging-throughput" port="5455"/>

源码:
QsenderBean.java
/**
* 发送消息类
*/
package com.test.jms;

import javax.annotation.Resource;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueSession;
import javax.jms.TextMessage;

/**
* @author babyduxin
*
*/
@Stateless
@Remote(QSender.class)
public class QSenderBean implements QSender {

@Resource(mappedName = "java:/ConnectionFactory")
private QueueConnectionFactory factory;
@Resource(mappedName = "java:/queue/test")
Queue destionation;

public void send() {
QueueConnection conn = null;
QueueSession session = null;
try {
conn = factory.createQueueConnection();
session = conn.createQueueSession(false,
QueueSession.AUTO_ACKNOWLEDGE);
MessageProducer producter = session.createProducer(destionation);
TextMessage msg = session.createTextMessage("hello dujm");
producter.send(msg);
} catch (Exception e) {
e.printStackTrace();
}
finally{
try{
session.close();
conn.close();
}catch(JMSException e){
e.printStackTrace();
}
}

}
}
PrintBean.java 接收消息类

package com.test.jms;

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="java:/queue/test")

})

public class PrintBean implements MessageListener{

@Override
public void onMessage(Message arg0) {
TextMessage tmsg = (TextMessage)arg0;
try {
System.out.println(tmsg.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}
完整工程在附件中,由ejb3.1定时器负责启动,ejb3.1的定时功能比3.0进步很大,很方便

猜你喜欢

转载自dujianmeng.iteye.com/blog/1552685