zoukankan      html  css  js  c++  java
  • jms中topic和queue的区别

    一:Jboss的环境配置(略)

    二:开发环境jboss-4.2.2.GA+JDK1.6

    三: JMS 简单介绍

    1. 当你发送一个消息,你不能直接发送到对此消息感兴趣的接受者。而是你发送到一个目的地。对此消息感兴趣的接受者必须连接到目的地,得到此消息或在目的地设置订阅。

    2. JMS中有两种域:topics queues 

    一个消息发送到一个topics ,可以有多个客户端。用topic发布允许一对多,或多对多通讯通道。消息的产生者被叫做publisher,消息接受者叫做subscriber

    queue 是另外一种方式,仅仅允许一个消息传送给一个客户。一个发送者将消息放在消息队列中,接受者从队列中抽取并得到消息,消息就会在队列中消失。第一个接受者抽取并得到消息后,其他人就不能在得到它。

    为了能发送和接收消息,必须得到一个JMS连接。该连接是使用JMS Provider得到连接的,在得到连接之后,建立一个会话(Session)。然后再建立publisher/sender 来发送消息或subscriber/receiver来接收消息。 运行时,如果使用topic 那么publishersubscriber 通过一个topic来关联,如果使用queue ,则sender receiver通过queue来关联起来。

    3. JMS框架中运转的方法如下:

    (1) 得到一个JNDI初始化上下文(Context)

    (2) 根据上下文来查找一个连接工厂TopicConnectFactory/ QueueConnectionFactory (有两种连接工厂,根据是topic/queue来使用相应的类型)

    (3) 从连接工厂得到一个连接(Connect 有两种[TopicConnection/ QueueConnection]);

    (4) 通过连接来建立一个会话(Session);

    (5) 查找目的地(Topic/ Queue);

    (6) 根据会话以及目的地来建立消息制造者(TopicPublisher/QueueSender)和消费者(TopicSubscriber/ QueueReceiver).

    四:代码分析

    1) 初始化上下文

    配置JNDI的一个方法是通过属性文件jndi.properties。在这个文件中使用正确的值,并且把它所在的路径包含到classpath中,它比较容获得正确初始化上下文。 jndi.properties文件的内容如下:

    java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory java.naming.provider.url=localhost:1099 java.naming.factory.url.pkgs=org.jboss.naming:org.jnp.interfaces

    把该文件放置的路径成为你的classpath的一部分。

    2) 查找连接工厂

    查找连接工厂的代码如下: 对于一个topic目的地

    TopicConnectionFactory topicFactory = (TopicConnectionFactory) context.lookup (“ConnectionFactory”)

    Queue 目的地: QueueConnectionFactory queueFactory = (QueueConnectionFactory ) context.lookup (“ConnectionFactory”)

    3) 建立连接和会话。

    对于topic代码如下: //建立一个连接

    topicConnection = topicFactory.createTopicConnection();

    //建立一个会话

    topicSession = topicConnection.createTopicSession(false, //不需要事务 Session.AUTO_ACKNOLEDGE //自动接收消息的收条。);

    对于queue代码如下: //建立一个连接

    queueConnection = queueFactory.createQueueConnection();

    //建立一个会话

    queueSession = queueConnection .createQueueSession(false, //不需要事务 Session.AUTO_ACKNOLEDGE //自动接收消息的收条。 );

    4) 查找目的地

    对于topic 查找一个testTopic目的地

    Topic topic = (Topic) context.lookup(“topic/testTopic”);

    对于queue 查找一个testQueue目的地 Queue queue= (Queue) context.lookup(“queue/testQueue”);

    5)建立一个消息制造者Message Producer (topic publisher/ queue sender) 消息制造者是一个由session创建的对象,主要工作是发送消息到目的地。

    对于一个topic,需要通过TopicSession来创建一个TopicPublisher。代码如下: TopicPublisher topicPublisher = TopicSession.createPublisher(topic);

    对于一个queue,需要通过QueueSession来创建一个QueueSender。代码如下: QueuePublisher queuePublisher = queueSession.createSender(queue);

    6) 消息发送

    建立一个TestMessage并且publish 它, 代码:

    TextMessage message = topicSession.createTestMessage(); message.setText(msg); topicPublishe.publish(topic, message);

    建立一个TestMessage并且send它,代码:

    TextMessage message= queueSession.createTestMessage(); message.setText(msg); queueSender.send(queue, message);

  • 相关阅读:
    [HIS] HIT行业常用名词及缩写定义
    String Split 和 Join
    深入解析字符串的比较方法:“==”操作符;String.Equals方法;String.Compare方法;String.CompareOrdinal方法。
    Oracle安装时先决条件检查失败的解决方案
    C#创建XML文件并保存
    关于SQL Server 数据库的备份
    为Windows 7添加“Internet打印”功能
    C#如何使用和开发自定义配置节
    C#中配置文件的使用
    键盘KeyCode值列表
  • 原文地址:https://www.cnblogs.com/javahuang/p/3048957.html
Copyright © 2011-2022 走看看