• 原生 Java 客户端进行消息通信


    原生 Java 客户端进行消息通信

    Direct 交换器

      DirectProducer:direct类型交换器的生产者

      NormalConsumer:普通的消费者

      MulitBindConsumer:队列绑定到交换器上时,是允许绑定多个路由键的,也就是多重绑定MulitChannelConsumer:一个连接下允许有多个信道

      MulitConsumerOneQueue:一个队列多个消费者,则会表现出消息在消费者之间的轮询发送。

    生产者和消费者一般用法

      DirectProducer:direct类型交换器的生产者

      NormalConsumer:普通的消费者

      使用 DirectProducer作为生产者,NormalConsumer作为消费者,消费者绑定一个队列

    队列和交换器的多重绑定

      DirectProducer:direct类型交换器的生产者

      NormalConsumer:普通的消费者

      MultiBindConsumer:队列绑定到交换器上时,是允许绑定多个路由键的,也就是多重绑定对比:单个绑定的消费者只能收到指定的消息,多重绑定的的消费者可以收到所有的消息。

    一个连接多个信道

      DirectProducer:direct类型交换器的生产者

      MultiChannelConsumer:一个连接下允许有多个信道

      一个连接,我们可以使用多线程的方式模拟多个信道进行通讯。这样可以做到多路复用。

     

    一个队列多个消费者

      MultiConsumerOneQueue:一个队列多个消费者,则会表现出消息在消费者之间的轮询发送。

     

    Fanout

      消息广播到绑定的队列

       不管我们如何调整生产者和消费者的路由键,都对消息的接受没有影响。

    Topic

      通过使用“*”和“#”,使来自不同源头的消息到达同一个队列,”.”将路由键分为了几个标识符,“*”匹配 1个,“#”匹配一个或多个。例子如

        假设有交换器 topic_course,

        讲课老师有 king,mark,james,

        技术专题有 kafka,jvm,redis,

        课程章节有 A、B、C,

       路由键的规则为 讲课老师+“.”+技术专题+“.”+课程章节,如:king.kafka.A。

    *与#的区别:

      如果我们发送的路由键变成 king.kafka.A

      那么队列中如果绑定了 king.* 不能匹配

      队列中如果绑定了 king.# 能够匹配

    1、要关注所有的课程,怎么做?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#");

    2、关注 king 老师的所有课程,怎么办?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.#");

    注意:如果这里改为 king.* 的话,则不会出现任何信息,因为 “*”匹配 1个(使用.分割的标识的个数)

    3、关注 king 老师所有的 A 章节,怎么办?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.#.A");

      或者声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.*.A");

    4、关注 kafka 所有的课程,怎么办?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#.kafka.#");

    5、关注所有的 B 章节,怎么办?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "#.B");

    6、关注 king 老师 kafka  A 章节,怎么办?

      声明一个队列并绑定到交换器上:channel.queueBind(queueName,TopicProducer.EXCHANGE_NAME, "king.kafka.A");

     

     

  • 相关阅读:
    Android布局1
    QML 自定义折线图
    QML ChartView 画折线图
    操作系统复习笔记
    Redis的使用
    Git的基本使用
    Python json to excel/csv
    .NET中进行Base64加密解密
    用 IIS 7、ARR 與 Velocity 建设高性能的大型网站
    微信突然出现redirect_uri 参数错误
  • 原文地址:https://www.cnblogs.com/Soy-technology/p/11570215.html
Copyright © 2020-2023  润新知