zoukankan      html  css  js  c++  java
  • rabbitmq7-topic模式

    一、简介

    如果你对rabbitmq6-direct路由模式比较熟悉的话,把这个简介看完然后跳过,如果不熟的话,就把下面的代码看一看,有兴趣的敲一敲就可以了。本来不想写这一节的,但是为了体系的完整性,所以还是把这一节给补出来。

    rabbitmq2-这可能是rabbitmq最全的概览中,我们提到过topic和direct的区别,没有什么大的区别,就是binding key和routing key的匹配方式可以通过通配符的方式,也就是说路由模式是topic模式的一个特例。如果这一节代码你copy后发现有问题,请查看上一节的内容,其中有一些注意事项。talk is cheap ,show me the code,不多比比,下面把代码呈上来。

    二、代码:

    2.1 producer
    public class Producer {
        public static final String EXCHANGE_NAME = "topic_exchange";
        public static final String ROUTING_KEY1 = "topic.key1";
        public static final String ROUTING_KEY2 = "topic.key2";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            Connection conn = ConnUtils.getConn();
            Channel channel = conn.createChannel();
            /**
             * 注意下面我们持久化的是交换机,已经不是持久化的队列了,交换机是不存放消息的,只是一个消息的搬运工
             */
            String exchangeType = BuiltinExchangeType.TOPIC.getType();
            boolean durable = true;
            boolean autoDelete = false;
            boolean internal = false;
            Map<String,Object> arguments = null;
            // 声明一个交换机
            channel.exchangeDeclare(EXCHANGE_NAME, exchangeType,durable,autoDelete,internal,arguments);
            channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY1,null,"CEUIXCXI routing key1".getBytes());
            channel.basicPublish(EXCHANGE_NAME,ROUTING_KEY2,null,"CEUIXCXI routing key2".getBytes());
        }
    }

    上面的代码对比起来和上一节的没有明显的不同

    2.2 consumer代码:
    public class Consume001 {
    
        public static final String EXCHANGE_NAME = "topic_exchange";
        public static final String QUEUE_NAME1 = "topic_queue";
        public static final String ROUTING_KEY1 = "topic.*";
    
        public static void main(String[] args) throws IOException, TimeoutException {
            Connection conn = ConnUtils.getConn();
            final Channel channel = conn.createChannel();
            channel.queueDeclare(QUEUE_NAME1,true,false,false,null);
            channel.queueBind(QUEUE_NAME1,EXCHANGE_NAME,ROUTING_KEY1);
    
            Consumer consumer = new DefaultConsumer(channel){
                @Override
                public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                    System.out.println(new String(body,"utf-8"));
                    channel.basicAck(envelope.getDeliveryTag(),false);
                }
            };
            channel.basicConsume(QUEUE_NAME1,false,consumer);
        }
    }
    2.3、执行结果

    image.png
    image.png

    ps:这个系列里面还有一个rpc,但是我也不打算写了,毕竟专门的人干专门的事儿,框架也是一样的。同时学习的时候我们也是采用2和8的原则的,学20%的东西干80%的事儿,有时间的情况下我们再去慢慢的研究。

  • 相关阅读:
    控制台输出到txt
    textarea 自动到右边就换行
    论equals与==不同的重要性
    一年多后开通博客了
    java链接JDBC中的?问题
    Silverlight之打印
    软件测试理论
    Objc基础学习记录2
    Objc基础学习记录3
    window 下cygwin开启了后来又关闭了
  • 原文地址:https://www.cnblogs.com/fkxuexi/p/10674048.html
Copyright © 2011-2022 走看看