`
tonney_lee
  • 浏览: 25742 次
  • 性别: Icon_minigender_1
  • 来自: 浙江.杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

JMS 点对点接口

    博客分类:
  • Java
阅读更多
QueueConnectionFactory 是从 JNDI 中检索的受管理对象,它创建了到提供者的连接。它包含 createQueueConnection() 方法,该方法返回一个 QueueConnection 对象。

QueueConnection 封装了链接到提供者的活动连接。它的一些方法包括:

createQueueSession(boolean, int):返回一个 QueueSession 对象。boolean 参数指出 QueueSession 是否被处理,int 指出确认模式(请参阅 确认)。

start() (从 Connection 继承):激活提供者发送消息。

stop() (从 Connection 继承):临时停止发送消息,可以用 start() 重新开始发送。

close() (从 Connection 继承):关闭到提供者的链接,并释放它占有的所有资源。


QueueSession 是发送和接收 PTP 消息的单线程上下文。它的一些方法包括:

createSender(Queue):返回 QueueSender来向指定的 Queue 发送消息。


createReceiver(Queue):返回 QueueReceiver 对象来接收来自指定的 Queue 的消息。


createBrowser(Queue) (从 Session 继承):返回一个 QueueBrowser 对象来浏览指定 Queue 上的消息。


commit() (从 Session 继承):提交当前事务中所有已经使用或者产生的消息。


rollback() (从 Session 继承):回滚当前事务中所有已使用或者已产生的消息。


create<MessageType>Message(...) (从 Session 继承):返回 <MessageType>Message 的各种方法——例如 MapMessage、TextMessage 等。

Queue 封装了点对点目的地。它是一个从 JNDI 中检索的受管理对象。

QueueSender 被用来发送点对点消息。它的一些方法包括:

send(Message):发送指示的 Message。


setDeliveryMode(int) (从 MessageProducer 继承):设置后续消息发送的发送模式,有效值为 DeliveryMode.PERSISTENT 和 DeliveryMode.NON_PERSISTENT。


setPriority(int) (从 MessageProducer 继承):设置后续消息发送的优先级,有效值为 0 到 9。


setTimeToLive(long) (从 MessageProducer 继承):设置后面发送的消息失效前的持续时间,以毫秒为单位。


QueueReceiver 被用来接收点对点消息。它的一些方法包括:

receive() (从 MessageConsumer 继承):返回到达的下一个消息,这个方法会阻塞,直到下一个消息可用为止。


receive(long) (从 MessageConsumer 继承):接收在 long 毫秒内到达的下一个消息,如果在时间期限内没有消息到达,则返回 null。


receiveNoWait (从 MessageConsumer 继承):如果当前有一条消息,则接收下一条消息,如果没有消息,则返回 null。


setMessageListener(MessageListener) (从 MessageConsumer 继承):设置 MessageListener,MessageListener 对象在消息到达时接收它们,即异步方式接收消息。

用 QueueReceiver 接收消息时,在接收消息后从队列中删除她们。用 QueueBrowser 可以查看队列中的消息而不删除它们。完成这项操作的方法是 getEnumeration(),它返回一个可以用来扫描队列中消息的java.util.Enumeration,队列的变化(消息到达或失败)可能是可见的,也可能是不可见的。


例子:

QSender.java 
import java.io.*;
import javax.jms.*;
import javax.naming.*;

public class QSender {

    public static void main(String[] args) {

        new QSender().send();
    }

    public void send() {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            //Prompt for JNDI names
            System.out.println("Enter QueueConnectionFactory name:");
            String factoryName = reader.readLine();
            System.out.println("Enter Queue name:");
            String queueName = reader.readLine();

            //Look up administered objects
            InitialContext initContext = new InitialContext();
            QueueConnectionFactory factory =
                (QueueConnectionFactory) initContext.lookup(factoryName);
            Queue queue = (Queue) initContext.lookup(queueName);
            initContext.close();

            //Create JMS objects
            QueueConnection connection = factory.createQueueConnection();
            QueueSession session =
                connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            QueueSender sender = session.createSender(queue);

            //Send messages
            String messageText = null;
            while (true) {
                System.out.println("Enter message to send or 'quit':");
                messageText = reader.readLine();
                if ("quit".equals(messageText))
                    break;
                TextMessage message = session.createTextMessage(messageText);
                sender.send(message);
            }

            //Exit
            System.out.println("Exiting...");
            reader.close();
            connection.close();
            System.out.println("Goodbye!");

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }
}


QReceiver.java 
import java.io.*;
import javax.jms.*;
import javax.naming.*;

public class QReceiver implements MessageListener {

    private boolean stop = false;

    public static void main(String[] args) {

        new QReceiver().receive();
    }

    public void receive() {

        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        try {
            //Prompt for JNDI names
            System.out.println("Enter QueueConnectionFactory name:");
            String factoryName = reader.readLine();
            System.out.println("Enter Queue name:");
            String queueName = reader.readLine();
            reader.close();

            //Look up administered objects
            InitialContext initContext = new InitialContext();
            QueueConnectionFactory factory =
                (QueueConnectionFactory) initContext.lookup(factoryName);
            Queue queue = (Queue) initContext.lookup(queueName);
            initContext.close();

            //Create JMS objects
            QueueConnection connection = factory.createQueueConnection();
            QueueSession session =
                connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
            QueueReceiver receiver = session.createReceiver(queue);
            receiver.setMessageListener(this);
            connection.start();

            //Wait for stop
            while (!stop) {
                Thread.sleep(1000);
            }

            //Exit
            System.out.println("Exiting...");
            connection.close();
            System.out.println("Goodbye!");

        } catch (Exception e) {
            e.printStackTrace();
            System.exit(1);
        }
    }

    public void onMessage(Message message) {

        try {
            String msgText = ((TextMessage) message).getText();
            System.out.println(msgText);
            if ("stop".equals(msgText))
                stop = true;
        } catch (JMSException e) {
            e.printStackTrace();
            stop = true;
        }
    }
}

分享到:
评论

相关推荐

    JMS公用接口

    它支持同步和异步通信,以及点对点(队列)和发布/订阅(主题)两种模式,广泛应用于分布式系统、微服务架构和事件驱动的系统中。理解并熟练使用JMS接口,能帮助开发者构建更加健壮、高效的应用程序。

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

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

    软件接口(JMS及WEB SERVICE)

    1. **点对点(Queue)模型**:生产者向特定的队列发送消息,消费者从该队列接收消息。这种模型确保每个消息仅被一个消费者接收。 2. **发布/订阅(Topic)模型**:发布者向主题发布消息,多个订阅者可以接收这些消息...

    JMS实例 实例源码 点对点 主题 同步异步

    在本文中,我们将深入探讨JMS的核心概念,包括点对点(P2P)模型、发布/订阅(Topic)模型以及同步与异步通信方式,并通过具体的实例源码来帮助理解这些概念。 1. JMS基础: JMS提供了一种标准的API,允许应用程序...

    jms-1.1接口定义代码

    8. **消息模式**:包括点对点、发布/订阅、请求/响应等,每种模式都有其特定的应用场景和优点。 9. **消息类型**:JMS定义了几种消息类型,如TextMessage用于传输文本数据,ObjectMessage用于传输Java对象,...

    利用soapUI3.5测试JMS消息

    JMS支持两种主要的消息模型:点对点(Point-to-Point)和发布/订阅(Publish/Subscribe)。理解这两种模型是进行JMS测试的基础。 点对点模型基于队列,每个消息只有一个消费者,消息被发送到队列后,消费者从队列中...

    点对点消息模型示例

    点对点消息模型是Java消息服务(Java Message Service,简称JMS)中的一种核心消息传递模式,它在分布式系统中广泛用于...通过阅读这篇文章和查看对应的源代码,你将能够更好地掌握JMS点对点模型在实际项目中的应用。

    JMS 简介以及Weblogic配置JMS图解

    综上所述,JMS为Java开发者提供了一套标准的接口,用于构建可靠的消息传递系统,无论是简单的点对点通信还是复杂的发布/订阅模式。通过使用JMS,开发者可以专注于业务逻辑,而不必关心底层的消息传输细节,这极大地...

    JMS消息模型 JMS学习.doc

    3. **JMS Domains**:JMS有两种主要的消息模型,即点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)模式。 - **Point-to-Point (PTP)模式**:在这种模型中,消息从一个生产者发送到一个...

    JMS中间件ActiveMQ介绍

    - **消息模型**:JMS 支持两种主要的消息模型 —— 点对点(Point-to-Point, PTP)和发布/订阅(Publish/Subscribe, Pub/Sub)。 - **可靠消息传输**:确保消息能够准确无误地送达目标。 - **事务支持**:提供了...

    javax.jms-1.1.jar

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

    JMS 简单使用指南

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

    JMS demo 及 资料

    2. **消息队列(Message Queue)与主题(Topic)**: JMS提供了两种消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe)。在P2P模型中,消息被发送到一个消息队列,每个消息只被一个消费者接收...

    jms-1.1.jar

    JMS支持两种主要的消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe)。 点对点模型中,消息由一个生产者发送到一个队列,然后由一个或多个消费者接收,但每个消息只能被一个消费者消费。...

    SpringJMS示例代码

    SpringJMS支持两种消息模型:点对点(Queue)和发布/订阅(Topic)。点对点模型中,每个消息仅由一个消费者接收;而在发布/订阅模型中,消息可以被多个订阅者接收。 7. **消息持久化** SpringJMS和ActiveMQ结合,...

    JMS与MDB介绍

    在点对点模型中,消息生产者使用QueueSender;而在发布订阅模型中,使用TopicPublisher。 消息消费者消息消费者是接收消息的客户端,它们同样通过Session创建MessageConsumer对象。在点对点模型中,消费者使用...

    activeMQ-JMS实例

    JMS是一种标准接口,用于Java平台上的消息传递,提供了可靠的消息传递机制,确保消息的顺序和持久性,同时也支持点对点和发布/订阅两种消息模型。 在Spring MVC中集成ActiveMQ,我们可以利用Spring的JMS抽象层,它...

    JMS学习资料(word文档)

    `Destination`接口代表频道,它有两个子接口:`Topic`(用于发布-订阅模式)和`Queue`(用于点对点模式)。消息的生产者和消费者分别由`MessageProducer`和`MessageConsumer`接口表示,它们各自有针对不同模式的子...

    JMS API JAVADOC大全

    - **队列**: 一种点对点的消息传递模型,每个消息只会被一个消费者接收。 - **主题**: 一种发布/订阅模式,消息可以被多个消费者接收。 2. **核心接口** - **ConnectionFactory**: 用于创建与消息中间件的连接。...

    JMS1.1规范 中文版

    有两种主要的消息模型:点对点(Point-to-Point,P2P)和发布/订阅(Publish/Subscribe)。在点对点模型中,每个消息只被一个消费者接收,通常通过消息队列实现。而在发布/订阅模型中,一个消息可以被多个消费者...

Global site tag (gtag.js) - Google Analytics