您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

02 redis消息訂閱與發布推送給前端(求java學習路線圖?)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-06-01 07:40:33【】1人已围观

简介消息生產者的方法(send或publish方法)發送消息。(6)消息消費者消息消費者由Session創建,用于接收被發送到Destination的消息。兩種類型:QueueReceiver和Topic

消息生產者的方法(send或publish方法)發送消息。

(6) 消息消費者

消息消費者由Session創建,用于接收被發送到Destination的消息。兩種類型:QueueReceiver和TopicSubscriber。可分別通過session的createReceiver(Queue)或createSubscriber(Topic)來創建。當然,也可以session的creatDurableSubscriber方法來創建持久化的訂閱者。

(7) MessageListener

消息監聽器。如果注冊了消息監聽器,一旦消息到達,將自動調用監聽器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一種MessageListener。

深入學習JMS對掌握JAVA架構,EJB架構有很好的幫助,消息中間件也是大型分布式系統必須的組件。本次分享主要做全局性介紹,具體的深入需要大家學習,實踐,總結,領會。

五、常用消息隊列

一般商用的容器,比如WebLogic,JBoss,都支持JMS標準,開發上很方便。但免費的比如Tomcat,Jetty等則需要使用第三方的消息中間件。本部分內容介紹常用的消息中間件(Active MQ,Rabbit MQ,Zero MQ,Kafka)以及他們的特點。

5.1 ActiveMQ

ActiveMQ 是Apache出品,最流行的,能力強勁的開源消息總線。ActiveMQ 是一個完全支持JMS1.1和J2EE 1.4規范的 JMS Provider實現,盡管JMS規范出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。

ActiveMQ特性如下:

⒈ 多種語言和協議編寫客戶端。語言: Java,C,C++,C#,Ruby,Perl,Python,PHP。應用協議: OpenWire,Stomp REST,WS Notification,XMPP,AMQP

⒉ 完全支持JMS1.1和J2EE 1.4規范 (持久化,XA消息,事務)

⒊ 對spring的支持,ActiveMQ可以很容易內嵌到使用Spring的系統里面去,而且也支持Spring2.0的特性

⒋ 通過了常見J2EE服務器(如 Geronimo,JBoss 4,GlassFish,WebLogic)的測試,其中通過JCA 1.5 resource adaptors的配置,可以讓ActiveMQ可以自動的部署到任何兼容J2EE 1.4 商業服務器上

⒌ 支持多種傳送協議:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

⒍ 支持通過JDBC和journal提供高速的消息持久化

⒎ 從設計上保證了高性能的集群,客戶端-服務器,點對點

⒏ 支持Ajax

⒐ 支持與Axis的整合

⒑ 可以很容易得調用內嵌JMS provider,進行測試

5.2 RabbitMQ

RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,持久化。用于在分布式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。

幾個重要概念:

Broker:簡單來說就是消息隊列服務器實體。

Exchange:消息交換機,它指定消息按什么規則,路由到哪個隊列。

Queue:消息隊列載體,每個消息都會被投入到一個或多個隊列。

Binding:綁定,它的作用就是把exchange和queue按照路由規則綁定起來。

Routing Key:路由關鍵字,exchange根據這個關鍵字進行消息投遞。

vhost:虛擬主機,一個broker里可以開設多個vhost,用作不同用戶的權限分離。

procer:消息生產者,就是投遞消息的程序。

買粉絲nsumer:消息消費者,就是接受消息的程序。

channel:消息通道,在客戶端的每個連接里,可建立多個channel,每個channel代表一個會話任務。

消息隊列的使用過程,如下:

(1)客戶端連接到消息隊列服務器,打開一個channel。

(2)客戶端聲明一個exchange,并設置相關屬性。

(3)客戶端聲明一個queue,并設置相關屬性。

(4)客戶端使用routing key,在exchange和queue之間建立好綁定關系。

(5)客戶端投遞消息到exchange。

exchange接收到消息后,就根據消息的key和已經設置的binding,進行消息路由,將消息投遞到一個或多個隊列里。

5.3 ZeroMQ

號稱史上最快的消息隊列,它實際類似于Socket的一系列接口,他跟Socket的區別是:普通的socket是端到端的(1:1的關系),而ZMQ卻是可以N:M 的關系,人們對BSD套接字的了解較多的是點對點的連接,點對點連接需要顯式地建立連接、銷毀連接、選擇協議(TCP/UDP)和處理錯誤等,而ZMQ屏蔽了這些細節,讓你的網絡編程更為簡單。ZMQ用于node與node間的通信,node可以是主機或者是進程。

引用官方的說法: “ZMQ(以下ZeroMQ簡稱ZMQ)是一個簡單好用的傳輸層,像框架一樣的一個socket library,他使得Socket編程更加簡單、簡潔和性能更高。是一個消息處理隊列庫,可在多個線程、內核和主機盒之間彈性伸縮。ZMQ的明確目標是“成為標準網絡協議棧的一部分,之后進入Linux內核”。現在還未看到它們的成功。但是,它無疑是極具前景的、并且是人們更加需要的“傳統”BSD套接字之上的一 層封裝。ZMQ讓編寫高性能網絡應用程序極為簡單和有趣。”

特點是:

高性能,非持久化;

跨平臺:支持Linux、Windows、OS X等。

多語言支持; C、C++、Java、.NET、Python等30多種開發語言。

可單獨部署或集成到應用中使用;

可作為Socket通信庫使用。

與RabbitMQ相比,ZMQ并不像是一個傳統意義上的消息隊列服務器,事實上,它也根本不是一個服務器,更像一個底層的網絡通訊庫,在Socket API之上做了一層封裝,將網絡通訊、進程通訊和線程通訊抽象為統一的API接口。支持“Request-Reply “,”Publisher-Subscriber“,”Parallel Pipeline”三種基本模型和擴展模型。

ZeroMQ高性能設計要點:

1、無鎖的隊列模型

對于跨線程間的交互(用戶端和session)之間的數據交換通道pipe,采用無鎖的隊列算法CAS;在pipe兩端注冊有異步事件,在讀或者寫消息到pipe的時,會自動觸發讀寫事件。

2、批量處理的算法

對于傳統的消息處理,每個消息在發送和接收的時候,都需要系統的調用,這樣對于大量的消息,系統的開銷比較大,zeroMQ對于批量的消息,進行了適應性的優化,可以批量的接收和發送消息。

3、多核下的線程綁定,無須CPU切換

區別于傳統的多線程并發模式,信號量或者臨界區, zeroMQ充分利用多核的優勢,每個核綁定運行一個工作者線程,避免多線程之間的CPU切換開銷。

5.4 Kafka

Kafka是一種高吞吐量的分布式發布訂閱消息系統,它可以處理消費者規模的網站中的所有動作流數據。 這種動作(網頁瀏覽,搜索和其他用戶的行動)是在現代網絡上的許多社會功能的一個關鍵因素。 這些數據通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。 對于像Hadoop的一樣的日志數據和離線分析系統,但又要求實時處理的限制,這是一個可行的解決方案。Kafka的目的是通過Hadoop的并行加載機制來統一線上和離線的消息處理,也是為了通過集群機來提供實時的消費。

Kafka是一種高吞吐量的分布式發布訂閱消息系統,有如下特性:

通過O(1)的磁盤數據結構提供消息的持久化,這種結構對于即使數以TB的消息存儲也能夠保持長時間的穩定性能。(文件追加的方式寫入數據,過期的數據定期刪除)

高吞吐量:即使是非常普通的硬件Kafka也可以支持每秒數百萬的消息。

支持通過Kafka服務器和消費機集群來分區消息。

支持Hadoop并行數據加載。

Kafka相關概念

Broker

Kafka集群包含一個或多個服務器,這種服務器被稱為broker[5]

Topic

每條發布到Kafka集群的消息都有一個類別,這個類別被稱為Topic。(物理上不同Topic的消息分開存儲,邏輯上一個Topic的消息雖然保存于一個或多個broker上但用戶只需指定消息的Topic即可生產或消費數據而不必關心數據存于何處)

Partition

Parition是物理上的概念,每個Topic包含一個或多個Partition.

Procer

負責發布消息到Kafka broker

Consumer

消息消費者,向Kafka broker讀取消息的客戶端。

Consumer Group

每個Consumer屬于一個特定的Consumer Group(可為每個Consumer指定group name,若不指定group name則屬于默認的group)。

一般應用在大數據日志處理或對實時性(少量延遲),可靠性(少量丟數據)要求稍低的場景使用。

求java學習路線圖?

第一階段:JavaSE階段變量、數據類型、運算符

二進制和十進制的轉化

注釋、單行注釋、多行注釋、文本注釋、注釋內容和字節碼的關系

標識符、關鍵字、駝峰原則

變量的本質、內存畫圖、變量聲明和初始化

變量的分類和作用域(局部變量、成員變量、靜態變量)

常量和Final

基本數據類型介紹

整型變量和整型常量

浮點類型、float、double

char字符型、轉義字符

boolean布爾型、if語句使用要點、布爾類型占用空間問題

運算符介紹

算數運算符(二元、自增、自減)

賦值和賦值運算符

關系運算符詳解

邏輯運算符、短路運算符詳解

位運算符詳解

字符串連接符

條件運算符(三元運算符)

運算符優先級問題

自動類型轉換詳解

強制類型裝換詳解

基本數據類型裝換常見錯誤、溢出、L問題

使用Scanner獲取鍵盤輸入

很赞哦!(3)

相关文章

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:重庆巴南巴南区

工作室:小组

Email:[email protected]