分为两种消息域PTP(点对点)和Pub/Sub(发布/订阅)。PTP消息被产生者放入到一个队列中,消费者则从小消息列队中取走消息,消息一担取走,消息就从队列中移除。Pub/Sub消息和PTP最大的不同在于发布者发布一条消息后可以发送给所有订阅者,所有订阅者都拥有处理某一条消息的机会。
高级接口
|
PTP
域子接口
|
PUB/SUB
域子接口
|
ConnectionFactory
|
QueueConnectionFactory
|
TopicConnectionFactory
|
Connection
|
QueueConnection
|
TopicConnection
|
Destination
|
QueueDestination
|
TopicDestination
|
Session
|
QueueSession
|
TopicSession
|
MessageProducer
|
QueueMessageProducer
|
TopicMessageProducer
|
MessageConsumer
|
QueueMessageConsumer
|
TopicMessageConsumer
|
消息类型
|
说明
|
TextMessage
|
消息是一个字符
|
ObjectMessage
|
消息是一个实现了Serializable接口的对象
|
MapMessage
|
消息是一个MAP,包括一组键值对元素,键位一个字符,值为任意对象
|
BytesMessage
|
消息是一个二进制数组
|
StreamMessage
|
消息是一组JAVA原始类型数据,这些数据通过标准流操作按顺序进行填充和读取
|
import
javax.jms.Connection;
import
javax.jms.ConnectionFactory;
import
javax.jms.MessageProducer;
import
javax.jms.Session;
import
javax.jms.TextMessage;
import
javax.naming.InitialContext;
import
javax.jms.Destination;
public
class
MessageSender {
/**
*
发送方法
*
@param
msgText
*/
public
void
send(String msgText){
//
获取
jms
连接
Connection connection =
null
;
try
{
//
获取
JNDI
上下文
InitialContext ctx =
new
InitialContext();
ConnectionFactory cFactory = (ConnectionFactory)ctx.lookup(
"jndi/jmsConn"
);
//
获取
Destination
目标地址
Destination dest = (Destination)ctx.lookup(
"jndi/dest"
);
ctx.close();
//
获取一个
MOM
的连接
connection = cFactory.createConnection();
//
创建
JMS
会话
Session session = connection.createSession(
false
, Session.
AUTO_ACKNOWLEDGE
);
//
创建一个指定特定目标地址的消息发送者
MessageProducer sender = session.createProducer(dest);
//
建立
Body
内容
TextMessage message = session.createTextMessage(msgText);
//
发送给服务器
sender.send(message);
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
try
{
connection.close();
}
catch
(Exception e) {
e.printStackTrace();
}
}
}
}
|
import
javax.jms.Connection;
import
javax.jms.ConnectionFactory;
import
javax.jms.Destination;
import
javax.jms.JMSException;
import
javax.jms.MessageConsumer;
import
javax.jms.Session;
import
javax.jms.TextMessage;
import
javax.naming.InitialContext;
public
class
MessageReceiver {
/**
*
接收方法
*/
public
void
receive(){
Connection connection =
null
;
try
{
//
创建
JNDI
上下文
InitialContext ctx =
new
InitialContext();
ConnectionFactory cFactory = (ConnectionFactory)ctx.lookup(
"jndi/jmsConn"
);
//
获取目标地址信息
Destination dest = (Destination)ctx.lookup(
"jndi/dest"
);
ctx.close();
//
获取连接
connection = cFactory.createConnection();
//
获取连接对话
Session session = connection.createSession(
false
, Session.
AUTO_ACKNOWLEDGE
);
//
创建一个指向特定目标地址的消息消费者
MessageConsumer receiver = session.createConsumer(dest);
//
接收发送请求中的消息信息
TextMessage textMsg = (TextMessage)receiver.receive();
System.
out
.println(
"
获取内容:
"
+ textMsg.getText());
}
catch
(Exception e) {
e.printStackTrace();
}
finally
{
try
{
connection.close();
}
catch
(JMSException e) {
e.printStackTrace();
}
}
}
}
|