java消息通信_原生 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");
總結
以上是生活随笔為你收集整理的java消息通信_原生 Java 客户端进行消息通信的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 散列存储_什么是数据库散列存
- 下一篇: java bigdecimal乘法_Ja