`

jms P-T-P和Pub/Sub

    博客分类:
  • JMS
JMS 
阅读更多

如前所述,JMS分两大类:PTP和Pub/Sub

主要的几个对象:ConnectionFactory、Connection、Destination、Session、MessageProducer、MessageConsumer
其相互关系如下图:

1.PTP:
简单回顾7个对象:QueueConnectionFactory、QuequeConnection、Queue、QueueSession、QueueSender、QueueReceiver、QueueBrowser
    1) Sender
    try {
        //具体怎么得到就不写了,各个系统肯定都不一样,但终究都是通过jdni来获得
        Context jndiContext = new InitialContext();
        QueueConnectionFactory factory = jndiContext.lookup("**Factory");
        Queue queue = jndiContext.lookup("**Queue");
        QueueConnection connection = factory.createQueueConnection();
        boolean transaction = true;
        QueueSession session = connection.createQueueSession(transaction , Session.AUTO_ACKNOWLEDGE);
        Message objMessage = session.createObjectMessage();  //或session.createTextMessage("...");
        objMessage.setObject((Serializable)obj); //obj为要传输的对象
        QueueSender sender = session.createSender(queue);
        publisher.setTimeToLive(timeout); //long timeout = ...
        connection.start();
        sender.send(objMessage);
        //or
        /**
        sender = session.createSender(null);
        sender.send(queue, message);
        */
        //如果不用了,就收拾干净
        publisher.close();
        session.close();
        connection.close();
    } catch (JMSException e) {
        //TODO
    } finally {
        publisher = null;
        session = null;
        connection = null;
    }

    2) Receiver/Browser
        a.主动接收,synchronously
        try {
            QueueReceiver receiver = session.createReceiver(queue);
            receiver.receiveNoWait();
            /**
            QueueBrowser browser = session.createBrowser(queue); //QueueBrowser只会取消息,但不会取走消息
            Enumeration elements = browser.getEnumeration();
            while(elements.hasMoreElements) {
                Message message = elements.nextElement();
                ...
            }
            */
        } catch (JMSException e) {
            ...
        }

        b.消息侦听,也是最主要的应用,asynchronously
        try {
            MessageListener myListener = new MyListener();
            QueueReceiver receiver = session.createReceiver(queue);
            receiver.setMessageListener(myListener);
            connection.start();
        } catch (JMSException e) {
            ...    
        }

        public class MyListener impelments MessageListner {
            public void onMessage(Message message) {
                if(message instanceof TextMessage) {
                    ...
                } else if (message instanceof ObjectMessage) {
                    ...
                } else {
                    ...
                }    
            }
        }


2.Pub/Sub:
简单回顾6个对象:TopicConnectionFactory、TopicConnection、Topic、TopicSession、TopicPublisher、TopicSubscriber
    1) Publisher
    try {
        //具体怎么得到就不写了,各个系统肯定都不一样,但终究都是通过jdni来获得
        Context jndiContext = new InitialContext();
        TopicConnectionFactory factory = jndiContext.lookup("**Factory");
        Topic topic = jndiContext.lookup("**Topic");
        TopicConnection connection = factory.createTopicConnection();
        TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);  //false表示不使用事务
        Message objMessage = session.createObjectMessage();
        objMessage.setObject((Serializable)obj); //obj为要传输的对象
        TopicPublisher publisher = session.createPublisher(topic);
        publisher.setTimeToLive(100000);
        connection.start();
        publisher.publish(message);
        //or
        /**
        publisher = session.createPublisher(null);
        publiser.publish(topic, message);
        */
        publisher.close();
        session.close();
        connection.close();
    } catch (JMSException e) {
        //TODO
    }


    2) Subscriber
        a.主动接收,比如上面发送完后,接收回应消息,相当于同步接收了
        try {
            TopicSubscriber subscriber = session.createSubScriber(topic);
            message = subscriber.receiver(timeout); //long timeout = ...
            subscriber.close();
        } catch (JMSException e) {
            ...    
        }


        b.消息侦听,asynchronously
        try {
            ...
            TopicSubscriber subscriber = session.createSubScriber(topic);
            MessageListener listener = new MyListener();
            subscriber.setMessageListener(listener); //关键在于这个listener
            connection.start();
        } catch (JMSException e) {
            ...
        }

        MyListener实现同上

分享到:
评论

相关推荐

    JMS sub/pub实现聊天系统

    在"JMS sub/pub实现聊天系统"中,我们主要探讨的是如何利用JMS的发布/订阅(Publish/Subscribe)模型来构建一个聊天系统。 在JMS中,有两种消息传递模型:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe...

    ActiveMQ的处理模式:PTP与PUB/SUB

    在ActiveMQ中,有两种主要的消息处理模式:点对点(Point-to-Point,简称PTP)和发布/订阅(Publish/Subscribe,简称PUB/SUB)。本文将深入探讨这两种模式及其在SpringBoot应用中的实现。 首先,点对点(PTP)模式...

    JMS--J2EE培训材料

    JMS提供了两个主要的消息域:点对点(PTP)和发布/订阅(Pub/Sub)。 1. **点对点(PTP)**:在此模式下,消息发送给特定的目标队列,每个消息会被一个消费者接收并消费。一旦消息被消费,就从队列中移除。 - **队列...

    javax.jms-1.1.jar

    2. **消息模型**:JMS支持两种消息模型——点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)。在点对点模型中,消息从一个队列(Queue)中发送到另一个队列,每个消息仅被一个消费者接收。...

    jms-1_1-fr-apidocs.zip

    1. **消息模型**:JMS支持两种消息模型——点对点(Point-to-Point,PTP)和发布/订阅(Publish/Subscribe,Pub/Sub)。在点对点模型中,消息由一个生产者发送到一个队列,然后由一个消费者接收;而在发布/订阅模型...

    jboss-jms包

    - **消息模型**:JMS支持两种消息模型,点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。 - P2P模型中,消息从一个生产者发送到一个队列,然后由一个或多个消费者消费。消息一旦被消费...

    SpringBoot集成ActiveMQ

    SpringBoot集成ActiveMQ,ActiveMQ支持队列和主题两种消息发送方式,选择发送方式可以在SpringBoot的配置文件中通过参数spring.jms.pub-sub-domain来控制,值为false表示是队列,值为true表示是主题。

    jms-test.zip

    在JMS中,有两种主要的消息模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)模式。这两种模式各有特点,适用于不同的场景。 1. 点对点(Point-to-Point,P2P)模式: 在P2P模式下,...

    深入浅出JMS-JMS介绍说明文档

    JMS定义了两种基本的消息传递模型:点对点(Point-to-Point, P2P)和发布/订阅(Publish/Subscribe, Pub/Sub)。 ##### 1. 点对点(P2P) - **消息队列(Queue)**:消息队列是P2P模型的核心组件,每个消息都发送...

    jms-study.zip_jms_server jms

    JMS还定义了两种消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。 1. **点对点模型**:在P2P模型中,消息被发送到一个称为队列(Queue)的特定目的地。每个消息只有一个消费者...

    spring-jms

    它提供了同步和异步发送消息的方法,支持点对点(P2P)和发布/订阅(Pub/Sub)模型。 2. **MessageListener容器**: Spring提供了两种类型的容器——SimpleMessageListenerContainer和...

    jms-1.1+jmxri-1.2.1+jmxtools-1.2.1.zip

    在JMS-1.1规范中,主要有两种类型的消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。点对点模型通过队列(Queue)实现,每个消息只有一个消费者;而发布/订阅模型通过主题...

    spring-jms-4.2.xsd.zip

    Spring JMS支持各种特性,如点对点(P2P)和发布/订阅(Pub/Sub)消息模型,事务管理,以及通过JCA(Java Connector Architecture)适配器集成企业信息系统的功能。 在Spring应用中,开发者通常会在XML配置文件中...

    javax.jms包,sun的JMS接口规范包

    2. **消息模型**:JMS支持两种消息传递模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。在P2P模型中,每个消息仅由一个消费者接收,通常通过队列实现;在Pub/Sub模型中,消息可以被...

    JMS 简单使用指南

    - **消息服务体系结构**:JMS定义了两种主要的消息传送模型——点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)模型。 - **消息传送模型对照表**:PTP模式使用Queue,消息只能被一个消费...

    jms-ejb3 source code

    JMS支持两种消息模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。 EJB3是EJB规范的一个版本,简化了企业级开发,引入了注解驱动和POJO(Plain Old Java Object)概念,降低了开发...

    jms_tutorial-1_3.pdf

    JMS支持两种消息模型:点对点(Point-to-Point, P2P)和发布/订阅(Publish/Subscribe, Pub/Sub)。 - **点对点模型**:在这种模型中,消息发送者(生产者)将消息发送到一个特定的目标队列中,消息消费者(消费者)...

    javax.jms_1.1.0.jar.zip

    JMS提供两种消息传递模式:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe,Pub/Sub)。 【文件内容详解】: 1. **JMS API**:`javax.jms_1.1.0.jar`包含JMS API的所有接口和类,如`Message`、`...

    JMS简明教程(Java消息服务)

    Java消息服务支持两种消息模型:Point-to-Point消息(P2P)和发布订阅消息(Publish Subscribe messaging,简称Pub/Sub)。JMS规范并不要求供应商同时支持这两种消息模型,但开发者应该熟悉这两种消息模型的优势与缺点...

Global site tag (gtag.js) - Google Analytics