rabbitmq7-topic模式

作者: fkxuexi | 来源:发表于2018-09-11 10:22 被阅读0次

一、简介

如果你对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%的事儿,有时间的情况下我们再去慢慢的研究。

相关文章

  • rabbitmq7-topic模式

    一、简介 如果你对rabbitmq6-direct路由模式比较熟悉的话,把这个简介看完然后跳过,如果不熟的话,就把...

  • JS 设计模式

    工厂模式 单体模式 模块模式 代理模式 职责链模式 命令模式 模板方法模式 策略模式 发布-订阅模式 中介者模式 ...

  • iOS设计模式

    设计模式:MVC模式、单例模式、观察者模式、工厂模式、代理模式、策略模式、适配器模式、模版模式、外观模式、创建模式...

  • iOS知识点总结

    一、设计模式:MVC模式、单例模式、观察者模式、MVVM模式、工厂模式、代理模式、策略模式、适配器模式、模板模式、...

  • 常用设计模式 2018-09-15

    目录 代理模式 单例模式 命令模式 工厂模式 桥接模式 策略模式 装饰模式 观察者模式 门面模式 代理模式 静态代...

  • 计算机等级考试三级数据库复习(五)

    1.数据库系统 三级模式——》内模式,模式,外模式 二级映像模式(外模式/模式,模式/内模式) 模式/内模式提供数...

  • Retrofit源码解析

    设计模式:建造者模式、工厂方法模式、外观模式、代理模式、单例模式、策略模式、装饰模式、适配器模式、代理模式 一、R...

  • GOF23(java设计模式)--行为型模式

    职责链模式、迭代器模式、中介者模式、命令模式、解释器模式、访问者模式、策略模式、模版方法模式、状态模式、观察者模式...

  • vim学习 02——模式

    vim学习 02——模式 基本模式普通模式插入模式可视模式选择模式命令行模式Ex 模式 派生模式操作符等待模式插入...

  • 互联网营销与促销模式

    互联网营销与促销模式:众筹模式 团购模式 秒杀模式 满赠模式 积分模式 软文模式 会员模式 抽奖模式 体验模式 拍...

网友评论

    本文标题:rabbitmq7-topic模式

    本文链接:https://www.haomeiwen.com/subject/osyygftx.html