MOM(Message Oriented Middleware 面向消息的中间件)
集成应用系统的强大工具(松散耦合)
MOM提供在不同应用程序之间传递消息的服务
程序员不必考虑:消息握手、发送保证、定时、事务等
首先有以下几个概念:
TextMessage: 要发送的消息内容
MessageProducer: 消息发送者
MessageConsumer: 消息接收者
Destination: 目的地
Session: QueueSession、TopicSession类所实现的接口。一个单线程的context
Connection: 连接
ConnectionFactory: 连接工厂
Context: JNDI context
prop用的是Hashtable不是HashMap
1. 要想发送messge,需要一个发送者(MessageProducer)和发送的内容(TextMessage);
2. TextMessage由session.createTextMessage(s)生成
3. MessageProducer由session.createProducer(destination)生成
4. destination由context.lookup(“queue1”)生成
5. session由连接生成connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
6. connection由connectionFactory.createConnection();生成
7. connectionFactory由context.lookup生成
8. context由new InitialContext(prop)得到
9. prop就是一个hashtable,里面需要设置两个属性
Context.INITIAL_CONTEXT_FACTORY=“com.exolab.jms.jndi.InitialContextFactory”
Context.PROVIDER_URL=“tcp://localhost:3035”
一、初始工作
Hashtable prop = new Hashtable();
porp.put(Context.INITIAL_CONTEXT_FACTORY,”org.exolab.jms.jndi.InitialContextFactory”);
prop.put(Context.PROVIDER_URL,”tcp://localhost:3035”);
Context context = new InitialContext(prop);
ConnectionFactory factory = (ConnectionFactory)context.lookup(“ConnectionFactory”);
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Destination dest = (Destination)context.lookup("queue1");
二、消息的发送
MessageProducer sender = session.createProducer(dest);
TextMessage message = session.createTextMessage("hahahaha");
sender.send(message);
三、消息的同步接收
MessageConsumer consumer = session.createConsumer(dest);
Message message = consumer.receive();
四、消息的异步接收
receiver.setMessageListener(new MessageListener(){
public void onMessage(Message arg0) {
try {
System.out.println(((TextMessage)arg0).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
connection.start();