最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ActiveMQ消息簽收機(jī)制代碼實(shí)例詳解

 更新時(shí)間:2020年02月21日 14:41:49   作者:流氓大隊(duì)長(zhǎng)  
這篇文章主要介紹了ActiveMQ消息簽收機(jī)制代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了ActiveMQ消息簽收機(jī)制代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

消費(fèi)者客戶(hù)端成功接收一條消息的標(biāo)志是:這條消息被簽收。

消費(fèi)者客戶(hù)端成功接收一條消息一般包括三個(gè)階段:

1、消費(fèi)者接收消息,也即從MessageConsumer的receive方法返回

2、消費(fèi)者處理消息

3、消息被簽收

其中,第三階段的簽收可以有ActiveMQ發(fā)起,也可以由消費(fèi)者客戶(hù)端發(fā)起,取決于Session是否開(kāi)啟事務(wù)以及簽收模式的設(shè)置。

在帶事務(wù)的Session中,消費(fèi)者客戶(hù)端事務(wù)提交之時(shí),消息自動(dòng)完成簽收。

在不帶事務(wù)的Session中,消息何時(shí)以及如何被簽收取決于Session的簽收模式設(shè)置

非事務(wù)Session可以設(shè)置如下幾種簽收模式:

1.Session.AUTO_ACKNOWLEDGE

當(dāng)消息從MessageConsumer的receive方法返回或者從MessageListener接口的onMessage方法返回時(shí),會(huì)話自動(dòng)確認(rèn)消息簽收

2.Session.CLIENT_ACKNOWLEDGE

需要消費(fèi)者客戶(hù)端主動(dòng)調(diào)用acknowledge方法簽收消息,這種模式實(shí)在Session層面進(jìn)行簽收的,簽收一個(gè)已經(jīng)消費(fèi)的消息會(huì)自動(dòng)的簽收這個(gè)Session已消費(fèi)的所有消息:

例如一個(gè)消費(fèi)者在一個(gè)Session中消費(fèi)了5條消息,然后確認(rèn)第3條消息,所有這5條消息都會(huì)被簽收

3.Session.DUPS_OK_ACKNOWLEDGE

這種方式允許JMS不必急于確認(rèn)收到的消息,允許在收到多個(gè)消息之后一次完成確認(rèn),與Auto_AcKnowledge相比,這種確認(rèn)方式在某些情況下可能更有效,因?yàn)闆](méi)有確認(rèn),當(dāng)系統(tǒng)崩潰或者網(wǎng)絡(luò)出現(xiàn)故障的時(shí)候,消息可以被重新傳遞.

這種方式會(huì)引起消息的重復(fù),但是降低了Session的開(kāi)銷(xiāo),所以只有客戶(hù)端能容忍重復(fù)的消息才可使用。(如果ActiveMQ再次傳送同一消息,那么消息頭中的JMSRedelivered將被設(shè)置為true)

帶事務(wù)session的案例

  生產(chǎn)者

    必須在生產(chǎn)完數(shù)據(jù)之后手動(dòng)提交session

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Producter {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :連接工廠,JMS 用它創(chuàng)建連接
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS 客戶(hù)端到JMS Provider 的連接
  Connection connection = connectionFactory.createConnection();
  //啟動(dòng)連接
  connection.start();
  // Session: 一個(gè)發(fā)送或接收消息的線程 false:代表不帶事務(wù)的session AUTO_ACKNOWLEDGE:代表自動(dòng)簽收
  Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
  // Destination :消息的目的地;消息發(fā)送給誰(shuí).
  // 獲取session注意參數(shù)值my-queue是Query的名字
  Queue queue = session.createQueue("my-queue");
  // MessageProducer:創(chuàng)建消息生產(chǎn)者
  MessageProducer producer = session.createProducer(queue);
  // 設(shè)置不持久化 PERSISTENT:代表持久化 NON_PERSISTENT:代表不持久化
  producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  // 發(fā)送消息
  for (int i = 1; i <= 5; i++) {
   sendMsg(session, producer, i);
  }
  System.out.println("發(fā)送成功!");
  session.commit();
  session.close();
  connection.close();
 }
 /**
  * 在指定的會(huì)話上,通過(guò)指定的消息生產(chǎn)者發(fā)出一條消息
  *
  * @param session
  *   消息會(huì)話
  * @param producer
  *   消息生產(chǎn)者
  */
 public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException {
  // 創(chuàng)建一條文本消息
  TextMessage message = session.createTextMessage("Hello ActiveMQ!" + i);
  // 通過(guò)消息生產(chǎn)者發(fā)出消息
  producer.send(message);
 }
}

  消費(fèi)者

    消費(fèi)完數(shù)據(jù)之后必須手動(dòng)提交session

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.*;

public class JmsReceiver {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :連接工廠,JMS 用它創(chuàng)建連接
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS 客戶(hù)端到JMS Provider 的連接
  Connection connection = connectionFactory.createConnection();
  connection.start();
  // Session: 一個(gè)發(fā)送或接收消息的線程 true:表單開(kāi)啟事務(wù) AUTO_ACKNOWLEDGE:代表自動(dòng)簽收
  Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
  // Destination :消息的目的地;消息發(fā)送給誰(shuí).
  // 獲取session注意參數(shù)值xingbo.xu-queue是一個(gè)服務(wù)器的queue,須在在ActiveMq的console配置
  Queue queue = session.createQueue("my-queue");
  // 消費(fèi)者,消息接收者
  MessageConsumer consumer = session.createConsumer(queue);
  while (true) {
   //receive():獲取消息
   TextMessage message = (TextMessage) consumer.receive();
   if (null != message) {
    System.out.println("收到消息:" + message.getText());
    session.commit();
   } else {
    break;
   }
  }
  //回收資源
  session.close();
  connection.close();
 }
}

不帶事務(wù)session的案例

  1.自動(dòng)簽收

  2.手動(dòng)簽收

    生產(chǎn)者

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;

public class Producter {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :連接工廠,JMS 用它創(chuàng)建連接
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS 客戶(hù)端到JMS Provider 的連接
  Connection connection = connectionFactory.createConnection();
  //啟動(dòng)連接
  connection.start();
  // Session: 一個(gè)發(fā)送或接收消息的線程 false:代表不帶事務(wù)的session AUTO_ACKNOWLEDGE:代表自動(dòng)簽收
  /* Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);*/
  Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
  // Destination :消息的目的地;消息發(fā)送給誰(shuí).
  // 獲取session注意參數(shù)值my-queue是Query的名字
  Queue queue = session.createQueue("my-queue");
  // MessageProducer:創(chuàng)建消息生產(chǎn)者
  MessageProducer producer = session.createProducer(queue);
  // 設(shè)置不持久化 PERSISTENT:代表持久化 NON_PERSISTENT:代表不持久化
  producer.setDeliveryMode(DeliveryMode.PERSISTENT);
  // 發(fā)送消息
  for (int i = 1; i <= 5; i++) {
   sendMsg(session, producer, i);
  }
  System.out.println("發(fā)送成功!");
  session.close();
  connection.close();
 }
 /**
  * 在指定的會(huì)話上,通過(guò)指定的消息生產(chǎn)者發(fā)出一條消息
  *
  * @param session
  *   消息會(huì)話
  * @param producer
  *   消息生產(chǎn)者
  */
 public static void sendMsg(Session session, MessageProducer producer, int i) throws JMSException {
  // 創(chuàng)建一條文本消息
  TextMessage message = session.createTextMessage("Hello ActiveMQ!" + i);
  // 通過(guò)消息生產(chǎn)者發(fā)出消息
  producer.send(message);
     message.acknowledge();  //手動(dòng)提交
  } 
}

    消費(fèi)者

package com.wn.ddd;

import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
import sun.plugin2.os.windows.SECURITY_ATTRIBUTES;

import javax.jms.*;

public class JmsReceiver {
 public static void main(String[] args) throws JMSException {
  // ConnectionFactory :連接工廠,JMS 用它創(chuàng)建連接
  ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER,
    ActiveMQConnection.DEFAULT_PASSWORD, "tcp://127.0.0.1:61616");
  // JMS 客戶(hù)端到JMS Provider 的連接
  Connection connection = connectionFactory.createConnection();
  connection.start();
  // Session: 一個(gè)發(fā)送或接收消息的線程 true:表單開(kāi)啟事務(wù) AUTO_ACKNOWLEDGE:代表自動(dòng)簽收
  /*Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);*/
  Session session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
  // Destination :消息的目的地;消息發(fā)送給誰(shuí).
  // 獲取session注意參數(shù)值xingbo.xu-queue是一個(gè)服務(wù)器的queue,須在在ActiveMq的console配置
  Queue queue = session.createQueue("my-queue");
  // 消費(fèi)者,消息接收者
  MessageConsumer consumer = session.createConsumer(queue);
  while (true) {
   //receive():獲取消息
   TextMessage message = (TextMessage) consumer.receive();
   if (null != message) {
    System.out.println("收到消息:" + message.getText());
    message.acknowledge();  //手動(dòng)提交
   } else {
    break;
   }
  }
  //回收資源
  session.close();
  connection.close();
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟

    java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟

    這篇文章主要為大家詳細(xì)介紹了java微信企業(yè)號(hào)開(kāi)發(fā)之開(kāi)發(fā)模式的開(kāi)啟方法,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 使用Java將字符串在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換

    使用Java將字符串在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換

    大家都知道在一些情況下,我們需要特殊的編碼格式,如:UTF-8,但是系統(tǒng)默認(rèn)的編碼為ISO-8859-1,遇到這個(gè)問(wèn)題,該如何對(duì)字符串進(jìn)行兩個(gè)編碼的轉(zhuǎn)換呢,下面小編給大家分享下java中如何在ISO-8859-1和UTF-8之間相互轉(zhuǎn)換,感興趣的朋友一起看看吧
    2021-12-12
  • SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析

    這篇文章主要介紹了SpringAOP中的動(dòng)態(tài)代理技術(shù)深入解析,spring默認(rèn)使用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,類(lèi)如果實(shí)現(xiàn)了接口,spring就會(huì)用JDK動(dòng)態(tài)代理實(shí)現(xiàn)AOP,如果目標(biāo)類(lèi)沒(méi)有實(shí)現(xiàn)接口,spring則使用Cglib動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)AOP,需要的朋友可以參考下
    2024-01-01
  • Java多線程 Callable、Future 和FutureTask

    Java多線程 Callable、Future 和FutureTask

    這篇文章主要介紹Java多線程中的 Callable、Future 以及FutureTask,下面文章圍繞Java多線程的相關(guān)資料展開(kāi)全文詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Java 流的高級(jí)使用之收集數(shù)據(jù)解析

    Java 流的高級(jí)使用之收集數(shù)據(jù)解析

    這篇文章主要介紹了Java 流的高級(jí)使用之收集數(shù)據(jù)解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Mybatis如何使用ognl表達(dá)式實(shí)現(xiàn)動(dòng)態(tài)sql

    Mybatis如何使用ognl表達(dá)式實(shí)現(xiàn)動(dòng)態(tài)sql

    這篇文章主要介紹了Mybatis使用ognl表達(dá)式實(shí)現(xiàn)動(dòng)態(tài)sql的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot3使用Jasypt實(shí)現(xiàn)加密配置文件

    SpringBoot3使用Jasypt實(shí)現(xiàn)加密配置文件

    這篇文章主要為大家詳細(xì)介紹了SpringBoot3如何使用Jasypt實(shí)現(xiàn)加密配置文件功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-03-03
  • Java重寫(xiě)equals及hashcode方法流程解析

    Java重寫(xiě)equals及hashcode方法流程解析

    這篇文章主要介紹了Java重寫(xiě)equals及hashcode方法流程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • 解析spring boot與ireport 整合問(wèn)題

    解析spring boot與ireport 整合問(wèn)題

    本文通過(guò)實(shí)例代碼給大家介紹了spring boot 與 ireport 整合問(wèn)題,關(guān)于pom文件依賴(lài)的問(wèn)題通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-10-10
  • 使用jar包反編譯形成pom工程

    使用jar包反編譯形成pom工程

    這篇文章主要介紹了使用jar包反編譯形成pom工程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論

山阴县| 酒泉市| 进贤县| 瓦房店市| 旺苍县| 温泉县| 合作市| 西乌| 维西| 兰溪市| 石台县| 怀来县| 廊坊市| 普兰县| 浦县| 远安县| 宜丰县| 黑河市| 营口市| 治多县| 马山县| 襄城县| 威宁| 永善县| 余干县| 如皋市| 麻栗坡县| 江津市| 肇源县| 阆中市| 赤峰市| 韶山市| 固安县| 内乡县| 宁陕县| 金山区| 凤城市| 酒泉市| 北安市| 阳谷县| 永福县|