Java使用RabbitMQ(八)--Topics

原创 2018年04月17日 15:00:58

topics使用
虽然上一篇的direct交换机改善了我们的系统,但是它依然有限制–不能处理在复杂条件下的路由分发。比如同时根据 日志重要级别和角色来获取。

所以这里介绍另一个复杂点的交换机 topic。
topic交换机也是通过 routing_key 来筛选信息的,routing_key 的格式有要求,用.分隔,*表示一个词,#表示多个词。

这里写图片描述

quick.orange.rabbit会被 q1 q2队列同时收到
lazy.pink.rabbit会被q2收到

生产者:

 public static void main(String[] args) {
        try(Connection connection=getConnection("guest","guest","localhost",5672,"/");
            Channel channel=connection.createChannel()) {

            channel.exchangeDeclare(args[0],"topic");
//            String queueName= channel.queueDeclare().getQueue();
//            System.out.println(queueName);
            String message=getMessage(new String[]{"a","b","c"});
//            String queueName2= channel.queueDeclare().getQueue();
//            System.out.println(queueName2);
//            channel.queueBind(queueName2,args[0],args[1]);
//            channel.queueBind(queueName,args[0],"blue");
            int i=0;
            while (true){
                Thread.sleep(1000);
//                channel.basicPublish(args[0],queueName, null,(i+++message).getBytes("utf-8"));
                channel.basicPublish(args[0],"a.b.c", null,(i+++message).getBytes("utf-8"));
            }

//            Thread.sleep(2000);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

消费者:

  public static void main(String[] args) {
        try(Connection connection=BaseTest2.getConnection("guest","guest","localhost",5672,"/");
            Channel channel=connection.createChannel()) {
            channel.exchangeDeclare(args[0],"topic");
//            channel.queueDeclare("red",false,false,false,null);
            String queueName= channel.queueDeclare().getQueue();
            channel.queueBind(queueName,args[0],"a.#");
//            System.out.println(queueName);
            Consumer consumer=new DefaultConsumer(channel) {
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    String message = new String(body, "UTF-8");
                    try {
                        doWork(message);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    } finally {
                        System.out.println(message+" [x] Done");
                    }
//                    channel.basicAck(envelope.getDeliveryTag(),false);
                }
            };
            channel.basicConsume(queueName,true, consumer);
            Thread.sleep(200000);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ljz2016/article/details/79974981

RabbitMQ java Topics主题

本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与实验,内容仅供参考。 官网地址  https://www.rabbitmq.com/tutorials/tutorial-five-...
  • xiaofei15135161280
  • xiaofei15135161280
  • 2016-08-24 15:01:29
  • 356

RabbitMQ知识整合及探究

RabbitMQ知识整合及探究1、总体介绍1.1 RabbitMQ是一个由Erlang语言编写的AMQP协议的开源实现.1.2 RabbitMQ是信息传输的中间者.本质上,他从生产者(producer...
  • lsxf_xin
  • lsxf_xin
  • 2018-02-14 09:46:49
  • 12404

Java使用RabbitMQ(十)--常用操作以及注意事项

为了防止众所周知的身份信息用于生产环境的系统,guest只能用来访问本地。 channel可以主动关闭,但是这不是必须的,在关闭它所依赖的连接时,channel也会自动被关闭。 connectio...
  • ljz2016
  • ljz2016
  • 2018-04-18 16:12:29
  • 3

rabbitmq的java代码简单使用

引入pom内容: com.rabbitmq amqp-client 3.3.4 发送端代码: package com; import com.rabbitmq.clien...
  • lr131425
  • lr131425
  • 2017-03-30 10:26:58
  • 1349

rabbitmq介绍及rabbitmq在java中基础使用

RabbitMQ简介 RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。使用Erlang语言编写。 Rabb...
  • qq_34021712
  • qq_34021712
  • 2017-05-20 02:14:42
  • 475

RabbitMQ之Topics

In the previous tutorial we improved our logging system. Instead of using a fanout exchange only cap...
  • quan20111992
  • quan20111992
  • 2017-10-17 10:24:34
  • 58

JAVA-RabbitMQ使用示例

准备工作 导入相关的jar包,一般maven依赖的话只要在pom文件当中加入下面坐标就好。     com.rabbitmq     amqp-client     4.0.0 ...
  • belovehejian
  • belovehejian
  • 2017-07-13 17:42:36
  • 554

RabbitMQ Topics

消息生产者 package com.gch.rabbit.topic; import com.rabbitmq.client.Channel; import com.rabbitmq.clie...
  • black_cheng
  • black_cheng
  • 2017-11-08 22:53:09
  • 49

java 使用RabbitMQ示例

RabbitMQ简介 RabbitMQ是一个受欢迎的消息代理,通常用于应用程序之间或者程序的不同组件之间通过消息来进行集成。具有高可用高并发的优点,适合集群服务器。采用 Erlang实现, 对主要的...
  • pony_maggie
  • pony_maggie
  • 2017-04-08 20:49:56
  • 2640

RabbitMQ的Java应用(1) -- Rabbit Java Client使用

摘要: 本文主要介绍使用RabbitMQ Java Client直接访问RabbitMQ。
  • u011126891
  • u011126891
  • 2017-01-09 13:54:47
  • 6077
收藏助手
不良信息举报
您举报文章:Java使用RabbitMQ(八)--Topics
举报原因:
原因补充:

(最多只允许输入30个字)