ActiveMQ高级特性

news/2024/4/19 8:02:05/文章来源:https://www.cnblogs.com/Fei-Gao/p/16846200.html

消息头

JMSDestination:消息发送的目的地,在发送过程中由提供者设置

JMSMessageID:消息的唯一标识符,由提供者设置

JMSDeliveryMode:消息持久化。包含DeliveryMode.PERSISTENT或者DeliveryMode.NON_PERSISTENT

JMSExpiration:消息失效的时间。单位为毫秒,0表示不会过期,默认为0

JMSPriority:消息优先级。0-4为普通,5-9位加急。不一定保证优先级高的先发,只保证加急消息发送先于普通消息。默认为4

JMSCorrelationID:用来链接响应消息与请求消息,由发送者的JMS程序设置

只有JMSCorrelationID,JMSReplyTo,JMSType可以被生产方修改

 

消息体

TextMessage:字符串

MapMessage:键值对

ObjectMessage:一个序列化的java对象

  注:发送的对象必须实现序列化,且消费者与生产者的对象目录结构得相同

  ActiveMQ5.12后,ActiveMQ不接受自定义序列化,需要将对象加入到信任的列表

  spring.activemq.packages.trust-all:true

BytesMessage:一个字节的数据流

StreamMessage:java原始值的数据流

 

JMS消息属性

用户可以给消息设置自定义属性

message.setStringProperty("Property", property);

 

JMS消息持久化

 消息持久化有三种消息存储方式:

1)Memory消息存储-基于内存的消息存储(重启会导致消息遗失)

  修改yml配置文件:jms.template.delivery-mode=non_persistent

2)基于日志的消息存储,kahaDB是ActiveMQ默认的日志存储方式

  修改yml配置文件:jms.template.delivery-mode=persistent

  消息自动存储到 activemq/data/kahandb 下

3)基于JDBC的消息存储

  修改yml配置文件:jms.template.delivery-mode=persistent

  修改conf/activemq.xml

  <bean name="mysql-ds" class="com.alibaba.druid.pool.druidDataSource" destory-method="close">

    <property name="driverClassName" value="com.mysql.jdbc.Driver" />

    <property name="url" value="jdbc:mysql://127.0.0.1:3306/db_activemq" />

    <property name="username" value="root" />

    <property name="password" value="" />

  </bean>

  删除kehaDB适配器,加入jdbc的适配器

  <persistenceAdapter>

    <jdbcPersistenceAdapter dataSource="#mysql-ds">

  <persistenceAdapter>

  导入jdbc和druid的jar包到lib下

消息事务

保证消息传递原子性的一个重要特征(一组消息要么全到达服务器,要么都不到达服务器)

生产者、消费者、消息服务器都支持事务性,ActiveMQ主要偏向生产者

 

消息确认机制

JMS消息只有在被确认值之后,才认为已经被成功消费,提供方才会将消息从队列中移除。

成功消费通常包含三个阶段:客户接收、处理、消息确认。

在事务性会话中,当一个事务被提交时,消息确认自动发生,在非事务性会话中,通常有三种模式:

1)Session.AUTO_ACKNOWLEDGE: 自动确认

2)Session.CLIENT_ACKNOWLEDGE:手动确认(一组消息中其中一个消息被确认,即全部被确认)

  调用message.acknowledge();

3)Session.DUPS_ACKNOWLEDGE:延迟确认(使用较少)

 

消息投递方式

异步投递

可以容忍一些信息的丢失,Producer.send()方法不会被堵塞。

同步投递

当消息生产者使用持久(persistent)传递模式发送消息时,Producer.send()方法会被堵塞,知道broker发送一个确认消息给生产者,这个确认消息表示broker已经成功接收消息并存入二级存储中。

延迟投递

延迟一段时间,再进行发送

定时投递

启动类上使用@EnableScheduling,生产者方法上使用@Scheduled(fixedDelay = 1000)

 

死信队列 DLQ Dead Letter Queue

当一个消息被重发超过6次(缺省值为6)时,会给broker发送一个"poison ack",这个消息被认为是 a poison pill,这是broker会将这个消息发送到死信队列,以便后续处理。

出现情况:

A transacted session is used and rollabck() is called.  事务操作调用rollback()

A transacted session is closed before commit is called.  事务操作在提交前关闭

A session is using CLIENT_ACKNOWLEDGE and Session.recover() is called.  使用手动确认机制

注:

1)缺省持久消息过期,会被送到DLQ,非持久化消息不会送到DLQ

2)缺省的死信队列是ActiveMQ.DLQ

 

问题1:ActiveMQ宕机怎么办?

设置zookeeper或ActiveMQ集群

问题2:如何防止消费方消息重复消费

数据库操作,则记录消息唯一标识符(JMSMessageID),非数据库操作可借用第三方应用redis记录消费记录。

问题3:如何防止消息丢失?

1)在生产者和消费者使用事务

2)在消费者采用手动消息确认(ACK)

3)消息持久化,例如JDBC或日志

问题4:什么事死信队列?

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_410404.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DJ8-2 主存储器的组织

如何由存储芯片到存储器&#xff1f; 确定设计容量&#xff1a;多大设计容量 芯片的选用&#xff1a;多大容量&#xff0c;位数&#xff0c;多少片&#xff0c;如何分组 地址分配&#xff1a;将CPU提供的全部地址空间的哪些地址空间分配给所设计的存储器&#xff0c;确定各芯…

docker搭建zabbix服务

docker搭建zabbix服务zabbix简介1、本次安装zabbix的镜像版本2、zabbix组件2.1 创建子网2.2 MySQL容器2.3 zabbix-server-mysql容器2.4 zabbix-web-nginx-mysql容器2.5 zabbix-agent2容器2.6 zabbix-snmptraps容器3、zabbix访问3.1 中文字体修改zabbix简介 zabbix&#xff08;…

esp32通过micropython-->MQTT--上传至腾讯云,实时显示温湿度数据保姆级教程(上)

esp32通过micropython-->MQTT--上传至腾讯云&#xff0c;实时显示温湿度数据保姆级教程&#xff08;上&#xff09;1.注册登录和创建产品&#xff1a;1.1注册账号/登录账号&#xff1a;1.2创建产品&#xff1a;1.注册登录和创建产品&#xff1a; 1.1注册账号/登录账号&…

销售人员应关注的 5 个指标

在上一篇博客 不想写代码&#xff0c;想要灵活性&#xff1f;这个指标平台全都有 中&#xff0c;我们提到了指标的分类一般分为基础指标、衍生指标和复合指标。其中基础指标可用于量化统计事务属性&#xff0c;如总金额等。而对于销售人员来说&#xff0c;最常接触/使用的指标是…

自动泊车的路径动态规划问题研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

【附源码】计算机毕业设计java支持协作知识建构的Python程序设计课程学习活动平台设计与实现

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

iPhone通讯录如何完整导入到新手机

概要&#xff1a;iPhone通讯录如何完整导入到新手机&#xff1f;在此部分中&#xff0c;我们将示范几个从iPhone转移通讯录到另一台iPhone的选项。其中&#xff0c;第一种更为推荐&#xff0c;因为更灵活且更容易操作。当然您也可以根据自身情况选择喜欢的方法。 iPhone14已经发…

【HDLBits刷题笔记】12 More Circuits

Rule90 第一次见这东西有点莫名其妙,但是其实看懂了之后就是左移和右移相异或,注意这里使用的是逻辑右移,会自动补零,不能使用算数左移<<<。module top_module(input clk,input load,input [511:0] data,output reg[511:0] q ); always@(posedge clk)beginif(load…

QT调用OpenCV绘制直线、矩形、椭圆、圆、不规则曲线、文本

开发环境&#xff1a;QT5.14.2OpenCV4.5 提前准备&#xff1a;准备编译好的OpenCV开发环境(如自行编译的mingw版的opencv库&#xff0c;本地路径D:\opencv\qt_build64)&#xff0c;准备一张测试图片&#xff08;如&#xff1a;d:\test.jpg&#xff09;。 项目结构&#xff1a…

零零信安-DD数据泄露报警日报【第31期】

01 概述 2022.10.26共发现匿名网络资讯信息70,642条&#xff1b;最近7天共发现匿名网络资讯信息472,185条&#xff0c;同比增长-42%&#xff1b;最近30天共发现匿名网络资讯信息2,498,093 条。 D&D评论&#xff1a; 国际上&#xff0c;近日监测到国外公司源代码泄漏事件增加…

Web响应式(二)

内容:媒体查询 媒体查询语法 组合媒体查询一、媒体查询 媒体查询,可以根据设备的能力应用特定的CSS样式。比如,可以根据视口宽度、屏幕宽高比和朝向(水平还是垂直)等,只用几行CSS代码就改变内容的显示方式。 二、媒体查询语法 媒体查询类型大全媒体查询属性大全:例子: …

理解vim工作的几个关键字

理解vim工作的几个关键字 下面我们再来认识一下 vim ,理清下面的 vim 的几个名词,这样方便我们以后更好的去使用和进阶vim : 缓冲区(Buffer), 窗口 (Window ) , 标签(Tab) , 标记(Mark ), 寄存器(Register) , 插件(Plugin) , vim 脚本(VimScript)。 缓冲区(buffer) 什…

【LeetCode】移除元素、删除有序数组中的重复项、合并两个有序数组

&#x1f9d1;‍&#x1f4bb;作者&#xff1a; 情话0.0 &#x1f4dd;专栏&#xff1a;《LeetCode》 &#x1f516;题目链接&#xff1a;移除元素、删除有序数组中的重复项、合并两个有序数组 目录一、移除元素示例 1&#xff1a;示例 2&#xff1a;理解思路1&#xff1a;代码…

Linux——页面置换算法(OPT、FIFO、LRU的实现与比较)

目录 1、 实验题目 2、实验要求 &#xff08;1&#xff09;指令的地址按下述原则生成 &#xff08;2&#xff09;具体的实施方法 &#xff08;3&#xff09;将指令序列变换为页地址流 3、算法实现参考代码&#xff1a; 4、运行结果 5、算法比较 1、 实验题目 设计一个虚…

使用Git Bash Here代码上传本地项目到GitLab

使用Git Bash Here代码上传本地项目到GitLab,上传到到GitHub等其它项目管理也类似。 一、第一次用代码上传项目 1.使用Git Bash Here打开代码输入框&#xff0c;创建克隆目录&#xff1a; git clone xxx/androidprojects.git 2. 把项目放到创建的目录下&#xff0c;并代码进…

Side Window Filtering 论文笔记

引言 Side Window Filtering是上了数字图像处理这门课后看的第二篇论文&#xff0c;这是一篇2019年发表的论文&#xff0c;提出的技术方法也相对比较新。由于我对CV方面涉猎不多&#xff0c;所以看的时候比较懵&#xff0c;似懂而非懂&#xff0c;于是打算做点笔记&#xff0c…

珠宝加工厂:我的成本下降空间在哪里?

摘要&#xff1a;珠宝加工厂&#xff0c;如何通过IoT边缘技术&#xff0c;OT/IT数据融合&#xff0c;实现成本的下降、效率的提升本文分享自华为云社区《玩转物联网IoT边缘服务系列二-珠宝加工的成本下降空间在哪里&#xff1f;》&#xff0c;作者&#xff1a;eleven1111 。 本…

小程序配置详解

小程序新生成时的目录 有4中不同的文件类型 .json 后缀的 JSON 配置文件.wxml 后缀的 WXML 模板文件.wxss 后缀的 WXSS 样式文件.js 后缀的 JS 脚本逻辑文件json app.json 是对当前小程序的全局配置&#xff0c;包括了小程序的所有页面路径、界面表现、网络超时时间、底部 ta…

elasticsearch、kibana、Ik分词器基于docker的单点部署

一、创建网络 由于需要让es和kibana容器互联&#xff0c;因此需要先创建一个网络。 但当也可以使用docker-compose的方式来完成一键互联&#xff0c;那样的话就不需要创建网络。 docker network create es-network二、安装elasticsearch 2.1 dockerHub直接拉取镜像的方式 …

AWS 使用Lambda实现钉钉机器人报警

aws 支持邮件和短信的报警通知&#xff0c;考虑时效性问题和结合公司的使用情况&#xff0c;需要接入钉钉机器人的告警提醒&#xff0c;为了使用钉钉机器人的告警&#xff0c;我们利用LambdaSNS&#xff0c;利用Lambda接受SNS的警告信息&#xff0c;然后通过python发送到钉钉机…