学习是一种信仰。
分类: Java
2014-05-19 15:18:00
基于Oracle高级队列的JMS开发
Oracle AQ
? 主要特点:
– 支持多种语言的客户端:
? Java、C#、C、C++、PHP、Python、JavaScript、Flash、……
– 支持多种协议:
? OpenWire、REST、Stomp、WS Notification、XMPP、AMQP。
– 可与多种企业平台集成。
– 支持消息分组、虚拟目的地、通配符等高级功能。
开发基于JMS的应用
? 依赖
– JavaEE: javax.jms.*
– Oracle AQ
? 开发JMS客户端
– JMS 消息发送方
– JMS 消息接收方
JMS API 编程模型
开发消息发送端(PTP模型)
1.创建连接工厂
2.创建JMS客户端到JMS Provider的连接
3.启动连接
4.创建会话
5.创建Queue类型的消息队列,指定消息目的地。
6.从会话中创建到指定目的地的消息生产者。
7.设置消息传递模式。
8.创建并发送消息。
9.关闭会话和连接。
1. 创建连接工厂
import javax.jms.ConnectionFactory
import oracle.jms.AQjmsFactory
import oracle.jms.AQjmsTopicConnectionFactory
AQjmsConnectionFactory aqFactory ;
aqFactory= (AQjmsTopicConnectionFactory)AQjmsFactory.getTopicConnectionFactory(host,sid,port,protocol)
2. 创建到JMS Provider的连接
import javax.jms.Connection
import java.sql.Connection
Connection dbConnection;
Connection aqConnection = aqFactory.createConnection(dbConnection)
3. 启动连接
aqConnection.start()
4. 创建会话
import javax.jms.TopicSession
import oracle.jms.AQjmsSession
Session aqSession = aqConnection.createTopicSession
(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE)
Session createTopicSession(boolean transacted,
int acknowledgeMode)
throws JMSException
5. 创建Topic类型的消息队列
import javax.jms.Topic
Topic topic = aqSession.getTopic(schemaName,aqName);
Topic getTopic(String schemaName,String aqName)
throws JMSException
6. 创建到指定目的地的消息生产者
import oracle.jms.AQjmsTopicPublisher
import javax.jms.TopicPublisher
AQjmsTopicPublisher topicPublisher = (AQjmsTopicPublisher) aqSession.createPublisher(topic)
7. 设置消息传递模式
topicPublisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
void setDeliveryMode(int deliveryMode)
throws JMSException
8. 创建并发送消息
import javax.jms.Message
import oracle.jms.AQjmsAdtMessage
Message message = (AQjmsAdtMessage)aqSession.createAQjmsAdtMessage(object);
topicPublisher.publish(message);
9. 关闭会话和连接
aqSession.close();
aqConnection.close();
开发消息接收端
1.创建连接工厂
2.创建JMS客户端到JMS Provider的连接
3.启动连接
4.创建会话
5.创建Topic类型的消息队列,指定消息源。
6.从会话中创建消息消费者。
7.接收消息(两种方式)
– 直接接收。
– 设置消息监听器。
8.关闭会话和连接。
6. 从会话中创建消息消费者
import javax.jms.TopicSubscriber
import oracle.jms.AQjmsTopicSubscriber
AQjmsTopicSubscriber topicSubscriber = aqSession.getDurableSubscriber(topic,aqName,ora)
7.接收消息
Message message = (AQjmsAdtMessage)topicSubscriber.receive();
7. 设置消息监听器
public class AQMessageListener implements MessageListener {
@Override
public void onMessage(Message msg) {
AQjmsAdtMessage Msg = (AQjmsAdtMessage) msg;
try {
System.out.println("接收到的消息是:" + Msg.get??????????());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
topicSubscriber.setMessageListener(new AQMessageListener());