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);

  • 相关阅读:
    MVC模式-----struts2框架(2)
    MVC模式-----struts2框架
    html的<h>标签
    jsp脚本元素
    LeetCode "Paint House"
    LeetCode "Longest Substring with At Most Two Distinct Characters"
    LeetCode "Graph Valid Tree"
    LeetCode "Shortest Word Distance"
    LeetCode "Verify Preorder Sequence in Binary Search Tree"
    LeetCode "Binary Tree Upside Down"
  • 原文地址:https://www.cnblogs.com/javahuang/p/3048957.html
Copyright © 2011-2022 走看看