`

Java Message Service Pub/sub 编程

    博客分类:
  • JMS
阅读更多

文章来源(IBM中国)

相同又不同


下面有这两个 pub/sub 程序——TPublisher.java 的代码清单 和 TSubscriber.java 的代码清单。我们不再像对 PTP 程序那样一步一步地去分析它们,因为除了所使用的 JMS 接口之外,它们与 QSender.java 和 QReceiver.java 是完全一样的。

在运行这些程序之前需要设置管理对象 TopicConnectionFactory 和 Topic。

运行后将会看到它们与 PTP 程序的不同。如果用同样的 QueueConnectionFactory 和 Queue 运行 QReceiver 的多个实例,您会看到在用 QSender 发送消息时,一个 QReceiver 实例只接收一个发送消息。

如果运行 TSubscriber 的多个实例,那么您就会看到从 TPublisher 发送的所有消息是由 TSubscriber 的所有实例接收的。

TPublisher.java 的代码清单
  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class TPublisher {   
  6.   
  7.     public static void main(String[] args) {   
  8.   
  9.         new TPublisher().publish();   
  10.     }   
  11.        
  12.     public void publish() {   
  13.   
  14.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  15.   
  16.         try {   
  17.             //Prompt for JNDI names   
  18.             System.out.println("Enter TopicConnectionFactory name:");   
  19.             String factoryName = reader.readLine();   
  20.             System.out.println("Enter Topic name:");   
  21.             String topicName = reader.readLine();   
  22.   
  23.             //Look up administered objects   
  24.             InitialContext initContext = new InitialContext();   
  25.             TopicConnectionFactory factory =   
  26.                 (TopicConnectionFactory) initContext.lookup(factoryName);   
  27.             Topic topic = (Topic) initContext.lookup(topicName);   
  28.             initContext.close();   
  29.   
  30.             //Create JMS objects   
  31.             TopicConnection connection = factory.createTopicConnection();   
  32.             TopicSession session =   
  33.                 connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);   
  34.             TopicPublisher publisher = session.createPublisher(topic);   
  35.   
  36.             //Send messages   
  37.             String messageText = null;   
  38.             while (true) {   
  39.                 System.out.println("Enter message to send or 'quit':");   
  40.                 messageText = reader.readLine();   
  41.                 if ("quit".equals(messageText))   
  42.                     break;   
  43.                 TextMessage message = session.createTextMessage(messageText);   
  44.                 publisher.publish(message);   
  45.             }   
  46.   
  47.             //Exit   
  48.             System.out.println("Exiting...");   
  49.             reader.close();   
  50.             connection.close();   
  51.             System.out.println("Goodbye!");   
  52.   
  53.         } catch (Exception e) {   
  54.             e.printStackTrace();   
  55.             System.exit(1);   
  56.         }   
  57.     }   
  58. }   

TSubscriber.java 的代码清单

  1. import java.io.*;   
  2. import javax.jms.*;   
  3. import javax.naming.*;   
  4.   
  5. public class TSubscriber implements MessageListener {   
  6.   
  7.     private boolean stop = false;   
  8.   
  9.     public static void main(String[] args) {   
  10.   
  11.         new TSubscriber().subscribe();   
  12.     }   
  13.   
  14.     public void subscribe() {   
  15.   
  16.         BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));   
  17.   
  18.         try {   
  19.             //Prompt for JNDI names   
  20.             System.out.println("Enter TopicConnectionFactory name:");   
  21.             String factoryName = reader.readLine();   
  22.             System.out.println("Enter Topic name:");   
  23.             String topicName = reader.readLine();   
  24.             reader.close();   
  25.   
  26.             //Look up administered objects   
  27.             InitialContext initContext = new InitialContext();   
  28.             TopicConnectionFactory factory =   
  29.                 (TopicConnectionFactory) initContext.lookup(factoryName);   
  30.             Topic topic = (Topic) initContext.lookup(topicName);   
  31.             initContext.close();   
  32.   
  33.             //Create JMS objects   
  34.             TopicConnection connection = factory.createTopicConnection();   
  35.             TopicSession session =   
  36.                 connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE);   
  37.             TopicSubscriber subscriber = session.createSubscriber(topic);   
  38.             subscriber.setMessageListener(this);   
  39.             connection.start();   
  40.   
  41.             //Wait for stop   
  42.             while (!stop) {   
  43.                 Thread.sleep(1000);   
  44.             }   
  45.   
  46.             //Exit   
  47.             System.out.println("Exiting...");   
  48.             connection.close();   
  49.             System.out.println("Goodbye!");   
  50.   
  51.         } catch (Exception e) {   
  52.             e.printStackTrace();   
  53.             System.exit(1);   
  54.         }   
  55.     }   
  56.   
  57.     public void onMessage(Message message) {   
  58.   
  59.         try {   
  60.             String msgText = ((TextMessage) message).getText();   
  61.             System.out.println(msgText);   
  62.             if ("stop".equals(msgText))   
  63.                 stop = true;   
  64.         } catch (JMSException e) {   
  65.             e.printStackTrace();   
  66.             stop = true;   
  67.         }   
  68.     }   
  69. }   
分享到:
评论

相关推荐

    JMS消息服务代码(java message service)

    Java Message Service(JMS)是Java平台中用于创建、发送、接收和读取消息的应用程序接口。它提供了一种标准的方式来解耦应用程序之间的通信,使得它们可以异步地交换信息,提高了系统的可扩展性和可靠性。在JMS中,...

    java message service 第二版

    Java消息服务(Java Message Service, JMS)是Java平台中的消息中间件接口标准,它为应用程序之间的通信提供了一种高效、可靠的机制。通过定义一系列的接口规范,JMS允许开发者在不同的消息传递系统之间进行互操作,...

    Java Message Service

    JMS是Java平台中的一个关键组成部分,主要用于实现异步通信,并且支持消息的传递机制,如点对点(PTP)和发布/订阅(Pub/Sub)模式。 #### 二、JMS的优势 **1. 异构系统集成** JMS支持不同平台和编程语言之间的消息...

    ActiveMQ在Java编程中的应用.docx

    Java消息服务(JMS,Java Message Service)是Java平台中用于进行异步消息传输的标准接口。JMS提供了两种消息模型:点对点(Point-to-Point, P2P)和发布/订阅(Publish/Subscribe, Pub/Sub)。 点对点模型(P2P)...

    flex与java交互的中间介质Blazeds

    4. Java后端集成:BlazeDS允许Java开发者使用Spring框架进行服务层和业务逻辑的开发,同时通过Java Message Service (JMS) 支持发布/订阅模型的消息传递,增强了系统的可扩展性和并发性。 5. 数据服务:BlazeDS提供...

    jms简介.pdf

    ### JMS (Java Message Service) 简介 #### 一、JMS 概述 JMS(Java Message Service)是一套由Sun Microsystems及其合作伙伴共同制定的Java API标准,旨在为Java应用程序提供创建、发送、接收及读取消息的服务。...

    activemq开发文档

    本文档主要围绕ActiveMQ这一基于Java Message Service (JMS) 规范的消息中间件进行详细介绍。 #### 二、面向消息的中间件(MOM) 面向消息的中间件是一种用于分布式系统之间进行异步通信的技术框架,通过消息...

    ActiveMQ入门.docx

    ActiveMQ 完全遵循 JMS(Java Message Service)1.1 标准,为 J2EE 应用提供了一种可靠的异步通信解决方案。 JMS 是一种 Java 平台中的 API,用于在应用程序之间发送和接收消息,以实现解耦和异步处理。它允许不同...

    ActiveMQ基础知识

    * JMS(Java Message Service):是指Java消息服务,提供了统一的消息传递机制。 * JMS Provider:是指提供JMS服务的消息中间件,例如ActiveMQ。 * JMS Client:是指使用JMS服务的应用程序。 1.3 JMS 编程模型 JMS...

    JMS 简单使用指南

    Java消息服务(JMS,Java Message Service)是一种用于在分布式环境中进行异步通信的应用程序接口。JMS允许应用程序创建、发送、接收和读取消息,有效地处理系统间的解耦和消息传递。以下是对JMS的一些关键知识点的...

    jms+activeMQ研究文档

    在深入研究JMS(Java Message Service)与ActiveMQ之前,先要了解分布式系统中消息中间件(Middleware)的重要性以及它们是如何解决现有RPC技术的局限性。传统的RPC中间件技术,如CORBA、DCOM、RMI等,在分布式系统...

    研究ActiveMQ的文档

    本篇将详细介绍ActiveMQ这一开源的MOM系统及其与Java Message Service (JMS)的关系。 #### 二、ActiveMQ与MOM的优势 **1. 异步通信** - 发送者将消息发送给消息服务器后,无需等待接收方响应即可继续执行其他任务...

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

    Java消息服务(JMS,Java Message Service)作为Java Platform Enterprise Edition (Java EE) 的重要组成部分之一,为开发者提供了一个强大的消息中间件标准。通过这一标准,应用组件能够在Java平台上创建、发送、...

    Message Queue 3.5.pdf

    JMS (Java Message Service)** - **定义**:Java消息服务(JMS)是Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或者分布于网络的不同部分中的组件之间进行通讯。 - **特点**:提供了标准的消息...

    java通过AMQ通讯

    AMQ是基于Java Message Service(JMS)规范的,它提供了一种高效、可靠的平台,使得应用程序之间可以通过异步的方式交换消息,从而解耦各个组件,提高系统的可扩展性和可靠性。 首先,我们需要了解JMS,它是Java...

    Active MQ in action 教程

    JMS(Java Message Service)是Sun Microsystems提出的一种消息中间件接口标准,它定义了两种消息模型:点对点(Point-to-Point,简称P2P)和发布/订阅(Publish/Subscribe,简称Pub/Sub)。P2P模型中,每个消息只能...

    java大厂面试题,面试题集

    在Java技术领域中,JMS(Java Message Service)是一种消息中间件,用于应用程序之间的异步通信。消息模型通常分为点对点(P2P)和发布/订阅(Pub/Sub)两种,消息消费涉及到消费者的幂等性设计,以防止消息丢失。在...

Global site tag (gtag.js) - Google Analytics