jms中怎么订阅oracle aq的topic

2025-03-11 06:54:36
推荐回答(1个)
回答1:

  基于Oracle高级队列的JMS开发
  基于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.AQjmsTopicConnectionFactoryAQjmsConnectionFactory aqFactory ;
  aqFactory=(AQjmsTopicConnectionFactory)AQjmsFactory.getTopicConnectionFactory(host,sid,port,protocol)2. 创建到JMSProvider的连接
  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(newAQMessageListener());