`
longgangbai
  • 浏览: 7339299 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JMS 异步消息的开发(二)

阅读更多

                 在发布/订阅(pub /分)的产品或应用软件,客户端的地址为主题的消息。 Publishers and subscribers are generally anonymous and may dynamically publish or subscribe to the content hierarchy. 发布服务器和订阅,一般不记名,可以动态地发布或订阅内容的层次结构。 The system takes care of distributing the messages arriving from a topic's multiple publishers to its multiple subscribers. 该系统以照顾用户分配多个消息的多个出版商其到达一个主题。 Topics retain messages only as long as it takes to distribute them to current subscribers. 消息只保留主题,只要他们需要分发到当前用户。

Pub/sub messaging has the following characteristics. 发布/订阅消息有以下几个特点。

  • Each message may have multiple consumers. 每个消息可以有多个消费者。
  • Publishers and subscribers have a timing dependency.发布服务器和订阅有时间依赖性。 A client that subscribes to a topic can consume only messages published after the client has created a subscription, and the subscriber must continue to be active in order for it to consume messages.一个客户端订阅一个主题可以使用客户端后发表的订阅只创造了一个消息,订阅者必须继续,以便它使用消息活跃。

          The JMS API relaxes this timing dependency to some extent by allowing clients to create durable subscriptions . JMS API的放松这个时间依赖性在一定程度上允许客户创建持久订阅 Durable subscriptions can receive messages sent while the subscribers are not active. Durable subscriptions provide the flexibility and reliability of queues but still allow clients to send messages to many recipients. 长期订阅可以接收用户发送的消息,而不是积极的。持久订阅队列提供灵活性和可靠性,但仍允许客户端发送邮件给多个收件人。

 

在JBOSS中发布订阅模式的开发:

在JBOSS_HOME 的server\default\deploy

<?xml version="1.0" encoding="UTF-8"?>
<!-- $Id: mail-service.xml 62350 2007-04-15 16:50:12Z dimitris@jboss.org $ -->
<server>

  <!-- ==================================================================== -->
  <!-- Mail Connection Factory                                              -->
  <!-- ==================================================================== -->

  <mbean code="org.jboss.mq.server.jmx.Topic"
         name="jboss.mq.destination:service=Topic,name=chatTopic">
    <attribute name="JNDIName">topic/chatTopic</attribute>
    <depends optional-attribute-name="DestinationManager" >jboss.mq:service=DestinationManager</depends>
  </mbean>

</server>

 

 

 

 

发布订阅模式的中服务端的信息:

 

package com.easyway.jboss.jms.ptp.service;
import java.util.Properties;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
 * 队列消息的发送者
 * 采用JMS点对点的模式
 * @author longgangbai
 *
 */
public class TopicSender {
	
	/**
	 * 
	 * @param args
	 */
	public static void main(String[] args) {
		TopicConnection conn=null;
		TopicSession session=null;
		try {
			//得到一个JNDI初始化上下文
			Properties props=new Properties();
			//设置
			props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
			
			props.setProperty(Context.PROVIDER_URL, "localhost:1099");
			
			props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
			
			InitialContext ctx=new InitialContext(props);
			//根据上下文查找一个连接工厂TopicConnectionFactory/QueueConnectionFactory  (有了两种连接工厂,
			//根绝topic、queue来是哟偶那个相应的类型),该连接工厂是有JMS提供的,不需要我们自己创建,每一个
			//厂商为他绑定一个全局的JNDI,我们功过JNDI便可获取它。
			TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory");
			//从连接工厂 中得到一个连接(Connect 的类型有两种,TopicConnection、QueueConnection)
			conn=factory.createTopicConnection();
			//通过连接来建立一个会话(Session)
			//建立一个不需要事物的并且能自动确认消息已接收的会话
			session=conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
			//查找目的地(目的地的类型有两种:Topic、Queue)
			Destination destination =(Topic)ctx.lookup("topic/chatTopic");
			//根绝会话以及目的地建立消息生产者MessageProducter(QueueSender 和TopicPublisher都扩展自MessageProducer接口)
			MessageProducer producer=session.createProducer(destination);
			
			TextMessage msg=session.createTextMessage("hi ,longgangbai ,this is jboss jms MDB message");
			
			producer.send(msg);
			System.out.println("发送消息成功!");
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			
			try {
				session.close();
				conn.close();
			} catch (JMSException e2) {
				e2.printStackTrace();
			}
		}
	}

}

 

 

 

接受消息的代码如下:

 

package com.easyway.jboss.jms.ptp.service;
import java.util.Properties;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.TextMessage;
import javax.jms.Topic;
import javax.jms.TopicConnection;
import javax.jms.TopicConnectionFactory;
import javax.jms.TopicSession;
import javax.naming.Context;
import javax.naming.InitialContext;
/**
 * 队列消息的发送者
 * 采用JMS点对点的模式
 * @author longgangbai
 *
 */
public class TopicReceive {
		/**
		 * 
		 * @param args
		 */
		public static void main(String[] args) {
			TopicConnection conn=null;
			TopicSession session=null;
			try {
				//得到一个JNDI初始化上下文
				Properties props=new Properties();
				//设置
				props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
				
				props.setProperty(Context.PROVIDER_URL, "localhost:1099");
				
				props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
				
				InitialContext ctx=new InitialContext(props);
				//根据上下文查找一个连接工厂TopicConnectionFactory/QueueConnectionFactory  (有了两种连接工厂,
				//根绝topic、queue来是哟偶那个相应的类型),该连接工厂是有JMS提供的,不需要我们自己创建,每一个
				//厂商为他绑定一个全局的JNDI,我们功过JNDI便可获取它。
				TopicConnectionFactory factory=(TopicConnectionFactory)ctx.lookup("ConnectionFactory");
				//从连接工厂 中得到一个连接(Connect 的类型有两种,TopicConnection、QueueConnection)
				conn=factory.createTopicConnection();
				//通过连接来建立一个会话(Session)
				//建立一个不需要事物的并且能自动确认消息已接收的会话
				session=conn.createTopicSession(false,TopicSession.AUTO_ACKNOWLEDGE);
				//查找目的地(目的地的类型有两种:Topic、Queue)
				Destination destination =(Topic)ctx.lookup("topic/chatTopic");
				//根绝会话以及目的地建立消息生产者MessageProducter(QueueSender 和TopicPublisher都扩展自MessageProducer接口)
				MessageConsumer consumer=session.createConsumer(destination);
				
				//DisplayMessage ml = new DisplayMessage();   
				//consumer.setMessageListener(ml);  
				System.out.println("开始接受消息");
				conn.start();//备注如果没有对象将一直处于wait()的状态,直到接受到对象
				TextMessage msg = (TextMessage) consumer.receive(); 
				String message = msg.getText(); 
				System.out.println("message="+message);
				System.out.println("接送消息成功!");

				
			} catch (Exception e) {
				e.printStackTrace();
			}finally{
				
				try {
					session.close();
					conn.close();
				} catch (JMSException e2) {
					e2.printStackTrace();
				}
			}
		}

	}

 

分享到:
评论

相关推荐

    tomcat spring jms 异步消息传递入门实例

    本教程将带你逐步了解如何利用Tomcat、Spring和JMS(Java Message Service)构建一个简单的异步消息传递入门实例。 首先,让我们来理解一下核心组件: 1. **Tomcat**:这是一个流行的开源Java Servlet容器,用于...

    JMS异步通信

    Java消息服务(JMS)是Java平台上用于异步通信的标准API。它允许应用程序通过消息传递在分布式系统中进行通信,从而实现解耦和提高...通过截图和教程,WSAD提供了一个全面的平台,帮助开发者理解和实现JMS异步通信。

    spring jms tomcat 异步消息传递入门实例

    在IT行业中,Spring框架是Java应用开发的基石,它提供了丰富的功能来简化应用程序的构建,而JMS(Java Message Service)则是处理异步通信的一种标准API。Tomcat作为轻量级的应用服务器,常用于部署Spring应用。在这...

    Spring JMS使异步消息变得简单.doc

    Spring JMS通过提供`JmsTemplate`类,将这些繁琐的步骤封装起来,开发者只需要调用几个简单的API就可以发送和接收消息,极大地提高了开发效率。 使用Spring JMS的一个关键优势在于其灵活性。`JmsTemplate`允许你...

    使用Spring JMS轻松实现异步消息传递.docx

    在 IT 领域,特别是在 Web 应用开发中,异步消息传递是一种提高系统效率和响应性的重要技术。传统的同步处理方式可能会导致用户等待时间较长,尤其是在处理复杂的业务逻辑或者需要执行耗时操作时。Spring 框架提供了...

    基于EASERVER的异步消息,已测试通过

    在EASERVER中实现异步消息,开发者需要配置JMS连接器,创建消息代理(Message Broker)和目的地(如队列或主题),并在应用程序中编写代码来发送和接收消息。发送端通常会创建一个消息对象,设置消息属性,然后通过...

    J2EE的异步消息机制

    总的来说,J2EE的异步消息机制通过JMS提供了强大的工具,允许企业应用在高并发、高负载的环境中实现高效、可靠的通信,增强了系统的灵活性和稳定性。开发者利用这些机制可以构建出能够应对复杂业务场景的企业级解决...

    JMS两个开发包

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准API。它允许应用程序创建、发送、接收和读取消息。在Java应用环境中,JMS扮演着至关重要的角色,尤其在分布式系统和企业...

    JMS 开发简明教程

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的一种标准API。它提供了一种可靠的消息传递机制,使得应用程序可以在分布式环境中发送、接收和管理消息。JMS允许应用程序在不...

    浅析WebLogic服务器上异步消息的接收

    2. JMS(Java Message Service)的集成:在WebLogic服务器中,异步消息通常是通过Java消息服务(JMS)来实现的。JMS是一种消息传递的标准,提供了创建、发送、接收和读取消息的API。WebLogic提供了JMS服务,使得...

    JMS消息发送及订阅

    Java消息服务(Java Message Service,简称JMS)是Java平台中用于企业级应用间异步通信的标准接口。它提供了一种可靠的消息传递机制,使得应用程序可以在分布式环境中交换信息。在这个主题中,我们将深入探讨JMS消息...

    结合Spring2.0和ActiveMQ进行异步消息调用

    在异步消息处理方面,Spring提供了JMS(Java Message Service)模板,使得开发者能够方便地发送和接收消息。 ActiveMQ则是Apache软件基金会的一个开源项目,它是JMS的实现,提供了一个高性能、可靠的、跨语言的消息...

    JMS消息模型 JMS学习.doc

    Java 消息服务(JMS,Java Message Service)是一种用于在分布式系统中进行异步数据交换的API,它为应用程序提供了标准的接口来发送和接收消息。JMS规范由JavaSoft(现为Oracle公司的一部分)制定,目的是促进不同...

    Spring+weblogic接收JMS消息

    在IT行业中,Spring框架是Java应用开发中的一个关键组件,尤其在企业级应用中,它提供了丰富的功能,如依赖注入、AOP(面向切面编程)以及与各种服务的集成,包括消息传递系统。WebLogic Server是Oracle公司的一款...

    C#JMS开发

    虽然JMS是为Java设计的,但通过适配器或开源库,C#开发者也能利用其功能,实现分布式系统中的异步通信和消息传递。 **一、JMS简介** JMS是一种API,用于在不同的应用程序之间发送和接收消息。它提供了标准化的接口...

    消息中间件和JMS消息服务.pdf

    ### 消息中间件与JMS消息服务详解 #### 一、引言 随着分布式系统的规模和复杂度不断增加,传统的远程过程调用(RPC)中间件技术...对于开发人员来说,理解和掌握JMS接口和消息模型是构建高效、可靠的企业级应用的基础。

    weblogic与jms+spring

    在WebLogic中整合JMS(Java Message Service)和Spring框架,可以实现异步消息处理,提高系统的响应速度和并发处理能力。JMS 是一个为Java平台设计的消息中间件接口,它允许应用程序通过消息传递进行通信,而Spring...

    jms消息通讯

    在IT行业中,JMS(Java Message Service)是Java平台上的一个标准接口,它定义了用于在分布式环境中交换异步消息的API。JMS允许应用程序创建、发送、接收和读取消息,有效地支持企业级应用之间的通信。在J2EE(Java ...

    Spring+weblogic9.2发送JMS消息

    通过JMS,应用可以在异步和解耦的方式下进行通信,提高了系统的可靠性和可扩展性。在Spring框架中,我们可以使用`JMSTemplate`来简化JMS操作,包括发送和接收消息。 集成Spring和WebLogic 9.2发送JMS消息的步骤如下...

Global site tag (gtag.js) - Google Analytics