首先我们来解释一下什么叫做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即可!