1. 程式人生 > >activemq中的訂閱模式以及訊息時長和確認機制

activemq中的訂閱模式以及訊息時長和確認機制

直接上程式碼

釋出主題

package com.activemq;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*; 

public class TopicPub {
	 public static void main(String[] args) throws JMSException {  
	        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
	        Connection connection = factory.createConnection();  
	        connection.start();  
	          
	        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
	        /**
	        Session javax.jms.Connection.createSession(boolean transacted, int acknowledgeMode) throws JMSException
	        1.transacted事務,事務成功commit,才會將訊息傳送到mom中
	        2.acknowledgeMode訊息確認機制
	        	 1)、帶事務的session
			        如果session帶有事務,並且事務成功提交,則訊息被自動簽收。如果事務回滾,則訊息會被再次傳送。
			     2)、不帶事務的session
			        不帶事務的session的簽收方式,取決於session的配置。
			        Activemq支援一下三種模式:
			        Session.AUTO_ACKNOWLEDGE  訊息自動簽收
			        Session.CLIENT_ACKNOWLEDGE  客戶端呼叫acknowledge方法手動簽收
			        Session.DUPS_OK_ACKNOWLEDGE 不是必須簽收,訊息可能會重複傳送。在第二次重新傳送訊息的時候,訊息
			        頭的JmsDelivered會被置為true標示當前訊息已經傳送過一次,客戶端需要進行訊息的重複處理控制。
			     程式碼示例如下:
			     session = connection.createSession(true, Session.CLIENT_ACKNOWLEDGE);
			     textMsg.acknowledge();
			*/
	        Topic topic = session.createTopic("wm5920.topic");  
	  
	        MessageProducer producer = session.createProducer(topic);  
	        producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);//設定非持久化  
//	        producer.setTimeToLive(5000);//5秒後過期,這個對點對點模式有效
            TextMessage message = session.createTextMessage();  
            message.setText("message_" + System.currentTimeMillis());  
            producer.send(message);  
            System.out.println("Sent message: " + message.getText());  
		    session.close();  
		    connection.stop();  
		    connection.close();  
	    }  
}

訂閱主題,注:如果在釋出主題前,沒有訂閱,是收不到訊息的,這跟點對點的佇列模式不同
package com.activemq;
import org.apache.activemq.ActiveMQConnectionFactory;  


import javax.jms.*;  


public class TopicSubs{
public static void main(String[] args) throws JMSException {  
        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");  
        Connection connection = factory.createConnection();  
        connection.setClientID("wm5920");
        connection.start();  
          
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
        Topic topic = session.createTopic("wm5920.topic");  
        
        //持久訂閱方式,不會漏掉資訊
        TopicSubscriber subs=session.createDurableSubscriber(topic, "wm5920");
        subs.setMessageListener(new MessageListener() {  
            public void onMessage(Message message) {  
                TextMessage tm = (TextMessage) message;  
                try {  
                    System.out.println("Received message: " + tm.getText());  
                } catch (JMSException e) {  
                    e.printStackTrace();  
                }  
            }  
        });
        
        //非持久訂閱方式
//        MessageConsumer consumer = session.createConsumer(topic);  
//        consumer.setMessageListener(new MessageListener() {  
//            public void onMessage(Message message) {  
//                TextMessage tm = (TextMessage) message;  
//                try {  
//                    System.out.println("Received message: " + tm.getText());  
//                } catch (JMSException e) {  
//                    e.printStackTrace();  
//                }  
//            }  
//        }); 
//        session.commit();
//      session.close();  
//      connection.stop();  
//      connection.close();  
    }  
}


相關推薦

activemq訂閱模式以及訊息確認機制

直接上程式碼 釋出主題 package com.activemq; import org.apache.activemq.ActiveMQConnectionFactory; import javax.jms.*; public class TopicPub {

activemq訂閱模式以及訊息確認機制

程式碼如下: package com.activemq;   import org.apache.activemq.ActiveMQConnectionFactory;   import ja

SpringBoot+ActiveMq實現訂閱模式(Topic)訊息佇列

上文已經詳細介紹了點對點模式(Queue)下的訊息佇列,今天就來再介紹一下訊息佇列的另一種模式:訂閱模式。 一、訂閱模式的流程 生產者產生一條訊息message放入一個topic中,該topic已經三個消費者訂閱了,那麼被放入topic中的這條訊息,就會同時被這三個消費者取走(當然他們必

jave 獲取音視頻文件的大小、以及播放

try message 文件夾 -1 sig system als alt for 首先引入jave-1.0.2.jar, 寫了個demo 僅供參考 package com.readVideo.test; public class VideoName { priv

ActiveMQ的設置消息,事務,確認機制 ,持久化

pub 重啟 list cto nta property 客戶端 tid 計數 轉載中------------ 1.消息事務 消息事務是在生產者producer到broker或broker到consumer過程中同一個session中發生的,保證幾條消息在發送過

audio自定義樣式,控制操作面板的暫停,播放,獲取音訊的以及根據進行進度條展示

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>audio例項</title> <script src="./js

java獲取mp3的播放mp3文件

length trace ger snapshot import oid 時長 cnblogs return 所需包為jaudiotagger-2.2.6-SNAPSHOT.jar和jl1.0.1.jar。 import java.io.BufferedInputStre

SqlAlchemy 操作數據庫sessionscoped_session的區別

tro color war mapped 數據庫 大小 bind nes email 原生session: from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from

買雲服務器送免費帶寬,有這麽好的事?

直接 頁面 http 好的 團購 com 小鳥雲 查看 一點 一般大家在購買雲服務器的時候,看到的優惠不外乎是八折九折這樣,不痛不癢的優惠力度感覺無法觸動人心!所以這次小鳥雲就玩得更大一點,直接給大家送免費的時長和帶寬了?!小鳥雲十月雲服務器拼團活動正式啟動啦!活動期間,開

scala實戰之spark使用者線上登入次數統計例項

接觸spark後就開始學習scala語言了,因為有一點python和java的基礎學習起來還行,今天在這裡把我工作中應用scala程式設計統計分析使用者行為日誌的例項和大家分析一下,我這裡主要講一下使用者的線上時長統計和登入次數統計演算法實現過程。 第一步 程式設計環境:首

ActiveMQ訊息傳送確認機制

ActiveMQ訊息傳送機制:Producer客戶端使用來發送訊息的, Consumer客戶端用來消費訊息; 它們的協同中心就是ActiveMQ broker,broker也是讓producer和consumer呼叫過程解耦的工具,最終實現了非同步RPC/資料交換的功能。 隨

C語言訪問結構體成員 點 . 箭頭 -> 的區別

    點(.)是用於結構體變數訪問成員,箭頭(->)是用於結構體指標訪問成員。    例如: #include <stdio.h> int main(void) { struct Smy { int a; };

27.session訪問步長佔比本地測試

本文為《Spark大型電商專案實戰》 系列文章之一,主要介紹之前實現的訪問時長和訪問步長所佔比例在本地進行測試。 說明 對於Accumulator這種分散式累加計算的變數的使用,有一個重要說明:

Java三大框架之——Hibernate的三種資料持久狀態快取機制

Hibernate中的三種狀態     瞬時狀態:剛建立的物件還沒有被Session持久化、快取中不存在這個物件的資料並且資料庫中沒有這個物件對應的資料為瞬時狀態這個時候是沒有OID。   持久狀態:物件經過Session持久化操作,快取中存在這個物件的資料為持久狀

ActiveMQ訊息的持久化非持久化 以及 持久訂閱 非持久訂閱者之間的區別與聯絡

①DeliveryMode 這是傳輸模式。ActiveMQ支援兩種傳輸模式:持久傳輸和非持久傳輸(persistent and non-persistent delivery),預設情況下使用的是持久傳輸。 可以通過MessageProducer類的 setDeliv

activeMQ公布訂閱模式經常使用工具類

模式 .text boolean ava cer ttext tex conn contain package com.jms; import java.util.Map; import java.util.concurrent.ConcurrentHashMap

ActiveMQ兩種訊息模式以及為什麼使用MQ

1.為什麼使用MQ  a.高併發 在高併發分散式環境下,由於來不及同步處理,請求往往發生堵塞;通過訊息佇列,可以非同步處理請求,緩解系統的壓力; b.鬆耦合性 一個應用傳送訊息到MQ之後並不關係訊息如何或者什麼時候被傳遞,同樣的訊息的接收者也不關係訊息從哪裡來的。在不同的環

ActiveMQ釋出-訂閱訊息模式(同點對點模式的區別)

點對點與釋出訂閱最初是由JMS定義的。這兩種模式主要區別或解決的問題就是傳送到佇列的訊息能否重複消費(多訂閱) 點對點: 訊息生產者生產訊息傳送到queue中,然後訊息消費者從queue中取出並且消費訊息。這裡要注意:  訊息被消費以後,queue中不再有儲存,所以訊息消費

搞懂:MVVM模型以及VUE的資料繫結資料劫持釋出訂閱模式

## 搞懂:MVVM模式和Vue中的MVVM模式 ### MVVM * MVVM : `model - view - viewmodel`的縮寫,說都能直接說出來 `model`:模型,`view`:檢視,`view-Model`:檢視模型 * V:檢視,即瀏覽器最前端渲染的頁面 * M:模型,資

Redis的批量操作是什麼?怎麼實現的延佇列?以及訂閱模式、LRU。

## 前言 這次的內容是我自己為了總結Redis知識而擴充的,上一篇其實已經總結了幾點知識了,但是Redis的強大,以及適用範圍之廣可不是單單一篇博文就能總結清的。所以這次準備繼續總結,因為第一個問題,Redis的批量操作,是我在面試過程中被真實問到的,當時沒答上來,也是因為確實沒了解過Redis的批量操作。