
DirectProducer:direct類型交換器的生産者
NormalConsumer:普通的消費者
MulitBindConsumer:隊列綁定到交換器上時,是允許綁定多個路由鍵的,也就是多重綁定MulitChannelConsumer:一個連接配接下允許有多個信道
MulitConsumerOneQueue:一個隊列多個消費者,則會表現出消息在消費者之間的輪詢發送。
使用 DirectProducer作為生産者,NormalConsumer作為消費者,消費者綁定一個隊列
MultiBindConsumer:隊列綁定到交換器上時,是允許綁定多個路由鍵的,也就是多重綁定對比:單個綁定的消費者隻能收到指定的消息,多重綁定的的消費者可以收到所有的消息。
MultiChannelConsumer:一個連接配接下允許有多個信道
一個連接配接,我們可以使用多線程的方式模拟多個信道進行通訊。這樣可以做到多路複用。
MultiConsumerOneQueue:一個隊列多個消費者,則會表現出消息在消費者之間的輪詢發送。
消息廣播到綁定的隊列
不管我們如何調整生産者和消費者的路由鍵,都對消息的接受沒有影響。
通過使用“*”和“#”,使來自不同源頭的消息到達同一個隊列,”.”将路由鍵分為了幾個辨別符,“*”比對 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");