ActiveMQ之java Api


ActiveMQ 安全機制

activemq的web管理界面:http://127.0.0.1:8161/admin

         activemq管控台使用jetty部署,所以需要修改密碼則需要修改相應的配置文件,apache-activemq-5.11.1\conf\jetty.xml

activemq應該設置有安全機制,只有符合認證的用戶才能進行發送和獲取消息,所以我們可以在activemq.xml添加安全驗證配置。一個插件,配置一下即可

配置完成后,需要重新啟動mq。

然后在Receive和Sender中配置相關的認證信息。

Connection方法使用

在成功創建正確的ConnectionFactory后,下一步將是創建一個連接,它是JMS定義的一個接口,ConnectionFactory負責返回可以與底層消息傳遞系統進行通信的Connection實現,通常客戶端只使用單一連接。根據JMS文檔,Connection的目的是“利用JMS提供者封裝開發的連接”,以及表示“客戶端與提供者服務例程之間開發TCP/IP套接字”。該文檔還指出Connection應該是進行客戶端身份驗證的地方等等,

當一個Connection被創建時,它的傳輸默認是關閉的,必須使用start方法開啟。一個Connection可以建立一個或多個的Session。

當一個程序執行完成后,必須關閉之前創建的Connection,否則ActiveMq不能釋放資源,關閉一個Connection同樣也關閉了Session,MessageProducer和MessageConsumer。

Connection.createConnection();

Connection.createConnection(String userName, String password ,String url);

Session方法使用

一旦從ConnectionFactory中獲得一個Connection,必須從Connection中創建一個或者多個Session。Session是一個發送或者接收消息的線程,可以使用Session創建MessageProducer,MessageConsumer和Message

Session可以被事務化,也可以不被事務化,通常,可以通過向Connection上的適當創建方法傳遞一個布爾參數對此進行設置。

Session createSession(boolean transacted ,int acknowledgeMode)

  其中transacted為使用事務標識,acknowledgeMode為簽收模式。

  結束事務有兩種方法:提交或者回滾,當一個事務提交,消費被處理、出入事務中有一個步驟失敗,事務就回滾,這個事務中的意見執行的動作將被撤銷。在發送消息最后也必須要使用session.commit()方法表示提交事務。

  簽收模式有三種形式:

  Session.AUTO_ACKNOWLEDGE 當客戶端從receive或onMessage成功返回時,Session自動簽收客戶端的這條消息的收條。

  Session.CLIENT_ACKNOWLEDGE客戶端通過調用消息(Message)的acknowledgeMode方法簽收消息。這種情況下,簽收發生在Session層面:簽收一個已消費的消息會自動簽收這個Session所有已消費的收條。

  Session.DUPS_OK_ACKNOWLEDGE此選項指示Session不必確保對傳送消息的簽收。它可能引起消息的重復,但是降低了Session的開銷,所以只有客戶端能容忍重復的消息,才可使用。

 MessageProducer

 MessageProducer : MessageProducer是一個由Session創建的對象,用來向Destination發送消息。

void send(Destination destination,Message message);

void send(Destination destination,Message message ,int deliveryMode,int priority . long timeToLive);

void send(Message message);

void send(Message message , int deliveryMode,int priority . long timeToLive)

其中deliveryMode為傳送模式,priority為消息優先級,timeToLive為消息過期時間。

ActiveMQ支持兩種消息傳送模式:PERSISTEN和NON_PERSISTENT兩種。如果不指定傳送模式,那么默認是持久化消息,如果容忍消息丟失,那么使用非持久性消息可以改善性能和減少存儲的開銷。

消息優先級從0-9石哥級別。0-4是普通消息,5-9是加急消息。如果不指定優先級,則默認為4.JMS不要求嚴格按照這10個優先級發送消息,但必須保證加急消息要先於普通消息到達。(消費順序和優先級不一致)

當然ActimeMQ還有一種獨有消費模式,可以確保消息順序

默認情況下,消息永不過期,如果消息在特定周期內失去意義,那么可以設置過期時間,時間單位為毫秒。

 MessageConsumer

MessageConsumer是一個由Session創建的對象,用來從Destination接收消息。

MessageConsumer createConsumer(Destination destination)

MessageConsumer createConsumer(Destination destination,String messageSelector)

MessageConsumer createConsumer(Destination destination,String messageSelector,boolean noLocal)

TopicSubscriber createDurableSubscriber(Topic topic,String name);

TopicSubscriber createDurableSubscriber(Topic topic,String name,String messageSelector,boolean noLocal);

其中messageSelector為消息選擇器,noLocal標志默認為false,當設置為true時限制消費者只能接收和自己相同的連接(Conneciton)所發布的消息。此標志只適用於主推,不適用於隊列;name標識訂閱主題所對應的訂閱名稱,持久訂閱時需要設置此參數。

public final String SELECTOR ="JMS_TYPE = 'MY_TAG1'";該選擇器檢查了傳入消息的JMS_TYPE屬性,並確定了這個屬性,並確定了這個屬性的值是否等於MY_TAG1.如果相等,則消息被消費,如果不相等,那么消息會被忽略。

 消息的同步和異步接收:

消息的同步接收是指客戶端主動去接收消息,客戶端可以采用MessageConsumer的receive方案區接收下一個消息。

  Message receive()

  Message receive(long timeout)

  Message receiveNoWait()

消息的異步接收是指當消息到達時,ActiveMQ主動通知客戶端,可以通過注冊一個實現MessageListener接口的對象到MessageConsumer,MessageListener只有一個必須實現的方案---onMessage,它只接收一個參數,即Message,在為每個發送到Destination的消息實現onMessage時,將調用該方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM