zoukankan      html  css  js  c++  java
  • JMS--Topic实战

    原文地址:http://blog.csdn.net/zhangxs_3/article/details/4034811

      与Queue不同的是,Topic实现的是发布/订阅模型,发布者发布的消息,可以被多个订阅者消费。现在我们建立两个订阅者,一个发布者,循环给这个topic发送消息。

    public class TestTopic {
      private static String brokerURL = "tcp://192.168.2.240:61616";

      private static ConnectionFactory connectionFactory;

      private static Connection connection;

      private static Session session;

      private static Destination topic;

      static{
        connectionFactory = new ActiveMQConnectionFactory(brokerURL);
        try {
          connection = connectionFactory.createConnection();
          connection.start();
          session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
          topic = session.createTopic("testtopic");
        } catch (JMSException e) {
          e.printStackTrace();
        }
      }


      public static void main(String[] args) throws Exception {
        MessageProducer producer = session.createProducer(topic);

        MessageConsumer consumer1 = session.createConsumer(topic);
        MessageConsumer consumer2 = session.createConsumer(topic);

        consumer1.setMessageListener(new MessageListener() {

          @Override
          public void onMessage(Message message) {
            try {
              String content = message.getStringProperty("content");
              System.out.println("consumer1:"+content);
            } catch (JMSException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
        });


        consumer2.setMessageListener(new MessageListener() {

          @Override
          public void onMessage(Message message) {
            try {
              String content = message.getStringProperty("content");
              System.out.println("consumer2:"+content);
            } catch (JMSException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
          }
        });


        for(int i=0;i<10;i++){
          Message message = session.createMessage();
          message.setStringProperty("content", i+"");
          producer.send(message);
        }
      }
    }

    运行结果:

    consumer1:0
    consumer2:0
    consumer1:1
    consumer2:1
    consumer1:2
    consumer2:2
    consumer1:3
    consumer2:3
    consumer1:4
    consumer2:4
    consumer1:5
    consumer2:5
    consumer1:6
    consumer2:6
    consumer1:7
    consumer2:7
    consumer1:8
    consumer2:8
    consumer1:9
    consumer2:9

    从结果中我们看出,发布者发送的消息会被多个订阅者使用。这说明每个订阅者都会消费其订阅者发送的消息。

  • 相关阅读:
    lsblk---列出所有可用块设备的信息,
    blkid---对系统块设备信息查询
    du---是对文件和目录磁盘使用的空间查看
    strings---对象文件或二进制文件中查找可打印的字符串
    which---查找并显示给定命令的绝对路径
    whereis---定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
    cd---切换工作目录
    cp---复制文件
    ls---显示文件目录各项信息
    pwd---以绝对路径的方式显示用户当前工作目录
  • 原文地址:https://www.cnblogs.com/gaohuiqian/p/5215975.html
Copyright © 2011-2022 走看看