負載均衡一(髒讀與串號)

 

1、或者用jdk的阻塞隊列linkedblockingqueue

我用過這個阻塞隊列解決過流水號串號問題

和消息隊列差不多

2、Redis提供了簡單的發佈訂閱功能,雖然不能和專業的消息中間件比,但如果我們只是簡單的想要使用發佈訂閱功能,那麼Redis中的發佈訂閱更合適不過了,因爲它和專業的消息中間比使用時相對比較簡單。

在Redis中消息的發佈者和訂閱者不能直接進行通信,而是通過頻道來實現的。消息的發佈者將消息發送到指定頻道中,而消息的訂閱者訂閱該頻道後,則會接受到該頻道中所有接收到的消息。

命令

  • 發佈消息     publish channel message

publish kafka "this is a message" 

publish命令的返回值爲該頻道的訂閱數,因爲該頻道沒有訂閱者,所以上圖中的代碼返回值爲0。

  • 訂閱消息      subscribe channel [channel ...]

 subscribe命令在執行成功後,命令行會阻塞,隨時等待着新的消息被髮送。如果此時我們在向該頻道中發送消息,則該訂閱會立即返回我們發送的消息。

下面我們瞭解一下訂閱命令的注意事項。

  • 客戶端在執行訂閱命令後會進入訂閱狀態,只允許輸入subscribe、psubscribe、unsubscribe、punsubscribe這四個命令。
  • 新開啓的訂閱客戶端是無法接受到之前頻道中消息的,因爲Redis不會對發佈的消息進行持久化。
  • 取消訂閱
unsubscribe [channel [channel ...]]

查詢訂閱

  • 查看活躍的頻道
pubsub channels
  • 查看頻道訂閱數
pubsub numsub
  • 查看模式訂閱數
pubsub numpat

上述內容就是Redis中發佈訂閱的全部內容,它和專業的消息中間件比例如Kafka、RocketMQ等。它不支持消息的堆積及回溯,如果我們在使用發佈訂閱功能時,如果可以容忍上述中的缺點,那我們Redis中的發佈訂閱功能可以優先考慮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章