首先编写消息驱动bean
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "queue/myQueue") })
public class MessageConsumer implements MessageListener {
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage tm = (TextMessage) message;
try {
System.out.println(tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
这个bean会监听jndi地址queue/myQueue上的消息
发送jms消息步骤:
1、首先从jndi上下文获取一个连接工厂,有TopicConnectionFactory/QueueConnectionFactory两种
2、从连接工厂获取一个连接,同理有QueueConnction/TopicConnection两种
3、通过连接建立一个会话,同理有QueueSession/TopicSession两种
4、通过session创建消息发送者,同理有QueueSender/TopicPublisher两种
5、发送jms消息,有TextMessage,MapMessage,ObjectMessage等
public void jmsQueue(){
QueueConnectionFactory factory = null ;
QueueConnection conn = null;
QueueSender sender = null;
QueueSession session = null ;
Queue queue = null;
try {
factory = (QueueConnectionFactory)this.context.lookup("ConnectionFactory");
conn = factory.createQueueConnection();
session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
queue = (Queue)this.context.lookup("queue/myQueue");
sender = session.createSender(queue);
TextMessage message = session.createTextMessage();
message.setText("hello world");
sender.send(message);
session.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
if(session!=null){
try {
session.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/myTopic") })
public class TopicMessageConsumer1 implements MessageListener{
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage tm = (TextMessage)message;
try {
System.out.println(this.getClass().getName()+":"+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Topic"),
@ActivationConfigProperty(propertyName = "destination", propertyValue = "topic/myTopic") })
public class TopicMessageConsumer implements MessageListener{
public void onMessage(Message message) {
if(message instanceof TextMessage){
TextMessage tm = (TextMessage)message;
try {
System.out.println(this.getClass().getName()+":"+tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
public void jmsTopic(){
TopicConnectionFactory factory = null ;
TopicConnection conn = null ;
TopicSession session = null ;
TopicPublisher sender = null ;
TextMessage message = null ;
Topic topic = null ;
try {
factory = (TopicConnectionFactory)this.context.lookup("ConnectionFactory");
conn = factory.createTopicConnection();
session = conn.createTopicSession(false, TopicSession.AUTO_ACKNOWLEDGE);
topic = (Topic)this.context.lookup("topic/myTopic");
sender = session.createPublisher(topic);
message = session.createTextMessage();
message.setText("hello world");
sender.send(message);
session.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
session.close();
} catch (Exception e2) {
}
}
}
<?xml version="1.0" encoding="UTF-8" ?>
<server>
<mbean code="org.jboss.mq.server.jmx.Queue"
name="jboss.org.destination:server=Queue,name=accpQueue" >
<attribute name="JNDIName" >queue/myQueue </attribute>
<depends optional-attribute-name = "DestinationManager" >
jboss.mq:service=DestinationManager
</depends>
</mbean>
<mbean code="org.jboss.mq.server.jmx.Topic" name="jboss.mq.destination:service=Topic,name=myTopic">
<attribute name="JNDIName" >topic/myTopic </attribute>
<depends optional-attribute-name="DestinationManager">jboss.mq:service=DestinationManager</depends>
</mbean>
</server>