activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...

ActiveMQ安装

1. 下载资源

ActiveMQ官网:

093ebeb745b2433fbf97d49de16664e3
cf7c0653059c4c6e8c63722172a59218

版本说明

ActiveMQ5.10.x以上版本必须使用JDK1.8才能正常使用。

ActiveMQ5.9.x及以下版本使用JDK1.7即可正常使用。

上传至Linux服务器

解压安装文件

tar -zxf apache-activemq-5.9.0-bin.tar.gz

检查权限

ls -al apache-activemq-5.9.0/bin

如果权限不足,则无法执行,需要修改文件权限:

chmod 755 activemq

复制应用至本地目录

cp -r apache-activemq-5.9.0 /usr/local/activemq

配置文件简介

/usr/local/activemq/conf/* - 配置文件.

需要关注的配置文件有: activemq.xml, jetty.xml, users.properties

任何配置文件修改后,必须重启ActiveMQ,才能生效.

activemq.xml

就是spring配置文件. 其中配置的是ActiveMQ应用使用的默认对象组件.

transportConnectors标签 - 配置链接端口信息的. 其中的端口号61616是ActiveMQ对外发布的tcp协议访问端口. 就是java代码访问ActiveMQ时使用的端口.

jetty.xml

spring配置文件, 用于配置jetty服务器的默认对象组件.

jetty是类似tomcat的一个中间件容器.

ActiveMQ默认支持一个网页版的服务查看站点. 可以实现ActiveMQ中消息相关数据的页面查看.

8161端口, 是ActiveMQ网页版管理站点的默认端口.

在ActiveMQ网页版管理站点中,需要登录, 默认的用户名和密码都是admin.

users.properties

内容信息: 用户名=密码

是用于配置客户端通过协议访问ActiveMQ时,使用的用户名和密码.

启动ActiveMQ

/usr/local/activemq/bin/activemq start

测试ActiveMQ

检查进程

ps aux | grep activemq

见到下述内容即代表启动成功

bc282e041b6048df90430acf0af242b4

管理界面

使用浏览器访问ActiveMQ管理应用, 地址如下:

用户名: admin

密码: admin

ActiveMQ使用的是jetty提供HTTP服务.启动稍慢,建议短暂等待再访问测试.

见到如下界面代表服务启动成功

6bc17b5d1a9347d5beebddf9edcc9c1d

修改访问端口

修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml

efb88d6373f447889d6d8d71ababfd9e

配置文件修改完毕,保存并重新启动ActiveMQ服务。

重启ActiveMQ

/usr/local/activemq/bin/activemq restart

关闭ActiveMQ

/usr/local/activemq/bin/activemq stop

ActiveMQ应用

1. PTP处理模式(Queue)

消息生产者生产消息发送到queue中,然后消息消费者从queue中取出并且消费消息。

消息被消费以后,queue中不再有存储,所以消息消费者不可能消费到已经被消费的消息。

Queue支持存在多个消费者,但是对一个消息而言,只会有一个消费者可以消费、其它的则不能消费此消息了。

当消费者不存在时,消息会一直保存,直到有消费消费

Publish/Subscribe处理模式(Topic)

消息生产者(发布)将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息。

和点对点方式不同,发布到topic的消息会被所有订阅者消费。

当生产者发布消息,不管是否有消费者。都不会保存消息

一定要先有消息的消费者,后有消息的生产者。

PTP和PUB/SUB简单对比

ActiveMQ安全认证

ActiveMQ也提供了安全认证。就是用户名密码登录规则。ActiveMQ如果需要使用安全认证的话,必须在activemq的核心配置文件中开启安全配置。配置文件就是conf/activemq.xml

在conf/activemq.xml配置文件的broker标签中增加下述内容。

指定了使用JAAS插件管理权限,至于configuration="activemq"是在login.conf文件里定义的

指定了具体的Topic/Queue与用户组的授权关系

" read="admins" write="admins" admin="admins"/>这个是必须的配置,不能少

开启认证后,认证使用的用户信息由其他配置文件提供。

conf/login.config

user代表用户信息配置文件,group代表用户组信息配置文件。寻址路径为相对当前配置文件所在位置开始寻址。

conf/users.properties

conf/groups.properties

ActiveMQ的持久化

ActiveMQ中,持久化是指对消息数据的持久化。在ActiveMQ中,默认的消息是保存在内存中的。当内存容量不足的时候,或ActiveMQ正常关闭的时候,会将内存中的未处理的消息持久化到磁盘中。具体的持久化策略由配置文件中的具体配置决定。

ActiveMQ的默认存储策略是kahadb。如果使用JDBC作为持久化策略,则会将所有的需要持久化的消息保存到数据库中。

所有的持久化配置都在conf/activemq.xml中配置,配置信息都在broker标签内部定义。

1. kahadb方式

是ActiveMQ默认的持久化策略。kahadb是一个文件型数据库。是使用内存+文件保证数据的持久化的。kahadb可以限制每个数据文件的大小。不代表总计数据容量。

特性是:1、日志形式存储消息;2、消息索引以B-Tree结构存储,可以快速更新;3、完全支持JMS事务;4、支持多种恢复机制;

AMQ方式

只适用于5.3版本之前。

AMQ也是一个文件型数据库,消息信息最终是存储在文件中。内存中也会有缓存数据。

性能高于JDBC,写入消息时,会将消息写入日志文件,由于是顺序追加写,性能很高。为了提升性能,创建消息主键索引,并且提供缓存机制,进一步提升性能。每个日志文件的大小都是有限制的(默认32m,可自行配置)。

当超过这个大小,系统会重新建立一个文件。当所有的消息都消费完成,系统会删除这个文件或者归档。

主要的缺点是AMQ Message会为每一个Destination创建一个索引,如果使用了大量的Queue,索引文件的大小会占用很多磁盘空间。

而且由于索引巨大,一旦Broker(ActiveMQ应用实例)崩溃,重建索引的速度会非常慢。

虽然AMQ性能略高于Kaha DB方式,但是由于其重建索引时间过长,而且索引文件占用磁盘空间过大,所以已经不推荐使用。

JDBC持久化方式

ActiveMQ将数据持久化到数据库中。 不指定具体的数据库。 可以使用任意的数据库中。 本环节中使用MySQL数据库。

下述文件为activemq.xml配置文件部分内容。不要完全复制。

首先定义一个mysql-ds的MySQL数据源,然后在persistenceAdapter节点中配置jdbcPersistenceAdapter并且引用刚才定义的数据源。

dataSource指定持久化数据库的bean,createTablesOnStartup是否在启动的时候创建数据表,默认值是true,这样每次启动都会去创建数据表了,一般是第一次启动的时候设置为true,之后改成false。

配置成功后,需要在数据库中创建对应的database,否则无法访问。表格ActiveMQ可以自动创建。

activemq_msgs用于存储消息,Queue和Topic都存储在这个表中:

ID:自增的数据库主键

CONTAINER:消息的Destination

MSGID_PROD:消息发送者客户端的主键

MSG_SEQ:是发送消息的顺序,MSGID_PROD+MSG_SEQ可以组成JMS的MessageID

EXPIRATION:消息的过期时间,存储的是从1970-01-01到现在的毫秒数

MSG:消息本体的Java序列化对象的二进制数据

PRIORITY:优先级,从0-9,数值越大优先级越高

activemq_acks用于存储订阅关系。如果是持久化Topic,订阅者和服务器的订阅关系在这个表保存:

主要的数据库字段如下:

CONTAINER:消息的Destination

SUB_DEST:如果是使用Static集群,这个字段会有集群其他系统的信息

CLIENT_ID:每个订阅者都必须有一个唯一的客户端ID用以区分

SUB_NAME:订阅者名称

SELECTOR:选择器,可以选择只消费满足条件的消息。条件可以用自定义属性实现,可支持多属性AND和OR操作

LAST_ACKED_ID:记录消费过的消息的ID。

表activemq_lock在集群环境中才有用,只有一个Broker可以获得消息,称为Master Broker,

其他的只能作为备份等待Master Broker不可用,才可能成为下一个Master Broker。这个表用于记录哪个Broker是当前的Master Broker。

只有在消息必须保证有效,且绝对不能丢失的时候。使用JDBC存储策略。

如果消息可以容忍丢失,或使用集群/主备模式保证数据安全的时候,建议使用levelDB或Kahadb。

activeMQ 安装教程视频版,可以转发文章关注然后私信我:“我要提升”,即可获得更多资料视频讲解

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

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

相关文章

DB2表结构DDL脚本导出

db2look是导出DDL语句脚本的命令&#xff0c;以下是对db2look的一个简单介绍。 语法&#xff1a;db2look -d <数据库名> -e -t <表名> -o <文件名>.dml -d&#xff1a;数据库名&#xff0c;这必须指定。 -e:抽取复制数据所需要的DDL文件&#xff0c;此项将生…

套装门安装_室内套装门-油漆工艺

上一期我们分享了套装门的分类和区别&#xff0c;主要从门芯和门皮的结构&#xff0c;主要分为纯实木门、实木复合门、模压门三种。也分享了三种类型的门的区别和基本定义&#xff0c;其中最为关键的是实木复合门&#xff0c;四层结构&#xff0c;其中门芯的填充料可操作空间很…

activiti 工作流_分享:springboot中关于工作流activiti的搭建

概念工作流产品使用activiti的算是比较多了&#xff0c;自带了一套UI界面&#xff0c;可以直接使用&#xff0c;用来设计流程&#xff0c;下面简单总结一下它的步骤&#xff1a;1 设计模型2 发布为流程&#xff0c;一个模型可以发布多个版本的流程3 建立一个流程的实例和实例任…

火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件

目前很多插件不支持 Firefox 3.5 哦1. Add N Edit Cookies 查看和修改本地的Cookie&#xff0c;Cookie欺骗必备。 下载&#xff1a;http://code.google.com/p/editcookie/downloads/list 2. User Agent Switcher 修改浏览器的User Agent&#xff0c;可以用来XSS。 下载&#xf…

ae saber插件_AE激光插件Video Copilot Saber安装方法

AE激光Video Copilot Saber插件可以制作出能量光束&#xff0c;激光&#xff0c;传送门&#xff0c;闪电&#xff0c;电流&#xff0c;朦胧等特效&#xff0c;内含有40多种不同类型的特效预设&#xff0c; 下面说下AE激光插件saber安装方法。插件特色&#xff1a; 1.可以创建高…

继电器rc吸收电路取值_继电器的工作原理以及驱动电路解析

继电器是具有隔离功能的自动开关元件&#xff0c;广泛应用于遥控、遥测、通讯、自动控制、机电一体化及电力电了设备中&#xff0c;是最重要的控制元件之一。继电器实际上是用较小的电流去控制较大电流的一种“自动开关”。故在电路中起着自动调节、安全保护、转换电路等作用。…

提高软技能之如何高效解决问题

解决问题的能力&#xff0c;不仅是技术人需要的通用技能&#xff0c;任何纵横职场的人都需要它&#xff0c;甚至可以这么说&#xff0c;“一个人解决问题的能力决定了ta对公司的价值”。解决什么问题其实不重要&#xff0c;本文将从一系列有趣的小问题出发&#xff0c;讨论一个…

口腔取模过程及注意事项_康贝齿科首家引进LAUNCA数字化口腔扫描,走进口腔数字化诊疗时代!...

口腔领域中的数字化技术包括数字化印模、数字化诊断与治疗、数字化生产、数字化手术导航、影像学以及相关材料的应用等。20世纪70年代Duret医生将工业数字化生产技术应用于口腔临床工作的大胆设想&#xff0c;使口腔数字化印模技术应运而生&#xff0c;走进现代医学的前沿。该设…

dataframe修改列名_python dataframe操作大全数据预处理过程(dataframe、md5)

hive表的特征选择&#xff0c;不同表之间的join训练数据、测试数据的分开保存使用pandas进行数据处理显示所有列&#xff1a;pd.set_option(display.max_columns, None)显示所有行&#xff1a;pd.set_option(display.max_rows, None)单列运算&#xff1a;df[col2] df[col1].ma…

JavaMail中附件名称有乱码

fileName bodyPart.getFileName(); //解决中文附件名的问题 if ((fileName ! null) && ( (fileName.toLowerCase().indexOf("gb2312") ! -1) || (fileName.toLowerCase().indexOf("gbk") ! -1) )){fileName MimeUtility.decodeText(fileName); …

android 获取控件高度_安卓开发入门教程UI控件_ProgressBar

什么是ProgressBarProgressBar是用于提示用户进行等待的UI控件,.基础样例1.loading图效果图代码布局文件代码<ProgressBarandroid:id"id/progressBar"style"?android:attr/progressBarStyle"android:layout_width"wrap_content"android:layo…

什么叫大地高_什么才叫睡得好?睡觉能满足这5个标准,说明睡眠质量高

每个人的睡觉习惯以及睡眠质量都是不一样的&#xff0c;有的人一晚甜睡到天亮&#xff0c;有的人则整晚辗转反侧难以入眠&#xff0c;有的人甚至会整晚都睡不着。睡眠质量的高低会影响一个人的精神状态以及工作的状态&#xff0c;而想要知道你的睡眠质量高不高&#xff0c;其实…

mysql function_Koa2 amp; mySQL amp; PM2 搭建后端服务

嘘&#xff01;啰嗦一句话。作为一名前端开发工程师&#xff0c;我们平常和后端接触最多的就是接口的对接。那么后端同事是怎么写一个接口来给到我们前端的同学去获取数据库数据并做一些花里胡哨的功能呢&#xff1f;今天我们就用Koa2 & mySql来搭建一个后端服务器&#xf…

datetime报错 sql脚本_《SQL必知必会》附录A样例表的获取和导入

拿到书的第二天就坐上了疫情期间的第一次飞机。。。飞机还延误了2个小时&#xff0c;有国外入境转机旅客搭乘了该趟航班&#xff0c;第一次觉得疫情离我这么近&#xff0c;不过还是坚持着到达了目的地&#xff0c;能做的只有带好口罩和手套。3个小时的飞行时间被拖到了5个小时&…

机器学习系列:

Copyright © 1900-2016, NORYES, All Rights Reserved. http://www.cnblogs.com/noryes/ 欢迎转载&#xff0c;请保留此版权声明。 ----------------------------------------------------------------------------------------- 挖个大坑&#xff0c;慢慢填。 开始算法研…

python不同版本共存_多个python版本共存时的pip配置

两种方法来配置pip Func1: 1.1 找到python环境的安装包&#xff0c;将python.exe文件重命名&#xff0c;如&#xff1a;将python2.7版本的python.exe重命名为Python2.exe,将python3.x版本的python.exe重命名为python3.x.exe。1.2 下面找到python安装包下的 Scripts文件夹下 pip…

dubbo的端口地址和ip写在那_开源一款超实用的 Dubbo 测试工具,已用半年,感觉很有feel~...

不知道你是否在工作中有遇到过类似情况&#xff1a;dubbo接口调试复杂&#xff0c;需要通过telnet命令或者通过consumer调用来触发。telnet语句参数格式复杂&#xff0c;每次编写都要小心谨慎&#xff0c;一旦出错又需重来。复杂对象参数传参调用接口复杂&#xff0c;编写java …

MySQL数据类型总结

MySQL中的数据类型大的方面来分&#xff0c;可以分为&#xff1a;日期和时间、数值&#xff0c;以及字符串。下面就分开来进行总结。 日期和时间数据类型 MySQL数据类型含义date3字节&#xff0c;日期&#xff0c;格式&#xff1a;2014-09-18time3字节&#xff0c;时间&#xf…

python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)

最近在查阅斐波那契数列时&#xff0c;看到下面的文章&#xff0c;总结得非常好&#xff0c;于是自己上手使用 Python 练习并实现多种求解方法守望&#xff1a;面试官问你斐波那契数列的时候不要高兴得太早​zhuanlan.zhihu.com斐波那契数列的定义&#xff1a;斐波那契数列 又称…

[修复] Firemonkey 使用 DrawPath 断线问题(Android iOS 平台)

问题&#xff1a;使用 Canvas.DrawPath 绘制时&#xff0c;最后一点无法画到终点位置。&#xff08;这个问题要在粗线才能察觉&#xff09; 适用&#xff1a;Delphi 10 Seattle &#xff08;或更早的版本&#xff09; for Android & iOS 修复方法&#xff1a; 请将源码 FMX…