activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...
ActiveMQ安装
1. 下载资源
ActiveMQ官网:
版本说明
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
见到下述内容即代表启动成功
管理界面
使用浏览器访问ActiveMQ管理应用, 地址如下:
用户名: admin
密码: admin
ActiveMQ使用的是jetty提供HTTP服务.启动稍慢,建议短暂等待再访问测试.
见到如下界面代表服务启动成功
修改访问端口
修改ActiveMQ配置文件: /usr/local/activemq/conf/jetty.xml
配置文件修改完毕,保存并重新启动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 安装教程视频版,可以转发文章关注然后私信我:“我要提升”,即可获得更多资料视频讲解
activemq中怎么知道推送消息是否成功_如何优雅的使用activeMQ 安装、应用、安全认证、持久化...相关推荐
- activemq中怎么知道推送消息是否成功_ActiveMQ安装试用示列
ActiveMQ安装配置和使用简例 ActiveMQ是一套JMS(Java Message Service)开源消息服务实现的组件.以Windows操作系统为例,本文简述了ActiveMQ的安装配置和 ...
- laravel6中使用广播推送消息
使用laravel广播推送消息 项目是基于laravel6开发的一个论坛项目,里面有公告和私信功能,需求要求做到实时推送 方案 使用php socket 搭建 使用laravel自带的广播 php s ...
- 微信小程序推送消息java开发_干货 | 微信小程序推送消息简单Demo
在开始前,你需要准备:注册微信小程序 一个简单的springBoot 项目 微信开发者工具 正式 微信小程序发送消息主要通过WxMaTemplateMessage 类来推送 public class ...
- html5 plus.push,HTML5+规范:Push(管理推送消息功能)
Push模块管理推送消息功能,可以实现在线.离线的消息推送,通过plus.push可获取推送消息管理对象. 1.方法 1.1.addEventListener: 添加推送消息事件监听器 void pl ...
- Pushlet实现定点推送消息与浏览器参数交互详解
今天在这里讲解一下关于开源框架Pushlet中的定点推送消息和与浏览器参数交互 通过上面的方法我就可以完成点对点的网页版本的聊天软件了,当然需要达到上面的要求我们这里需要对Pushlet的源码进 ...
- Java中集成极光推送实现给Android提送消息通知(附代码下载)
场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...
- Android中集成Jpush实现推送消息通知与根据别名指定推送附示例代码下载
场景 经常会有后台服务向Android推送消息通知的情况. 实现 首先在Android Studio中新建一个Android应用 在Project根目录的build.gradle中配置了jcenter ...
- 如何发布日历提醒推送消息服务器,iOS开发 -- 通过app向手机自带的日历中添加事件提醒...
在如今实际开发中,我们会有一种需求---通过自己的app往系统自带的日历中添加提醒事件. 一: 首先上最后效果图: WechatIMG7.jpeg 下图是关于添加事件的详情 WechatIMG8.jp ...
- 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息
在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息. 环境准备 这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境.使用如下步骤即可完成. ...
最新文章
- 赠书 | 一文了解预训练语言模型
- Ubuntu16.04安装视觉SLAM环境(OpenCV)
- 【MyBatis】学习纪要七:缓存(一)
- sql 树状结构中知道 父节点与孙节点_集群环境中使用Zookeeper实现分布式幂等控制...
- PB_Truncate函数截取小数点引起的数字错误
- python控制树莓派led_Python 控制树莓派 GPIO 输出:控制 LED 灯
- Linux Ubuntu终端“@”前后的含义及修改(修改用户名及主机名)【试用办法,部分不可行】
- 前端学习(549):node的 http模块
- 金融资讯数据服务平台建设实践
- Office EXCEL 中如何让一个单元格的数据链接到另一个工作表的数据
- maven引入hadoop_如何在maven中引用hadoop v2.3.0 jar?
- poj 1279 Art Gallery - 求多边形核的面积
- ORACLE ebs 11.5.10 for linux 安装心得
- 6. PHP 正则表达式
- ssh mysql视屏_ssh+mysql实现的Java web在线订电影票系统项目源码附带视频指导教程...
- velocity.properties配置说明
- 从PHP门外汉---菜鸟---高手的进阶之路
- 【2021年度总结】:23岁的流水账
- 使用html语言替换字符串中的特殊标点符号
- JavaScript 实例:点击漫天小星星 (获取整个浏览器窗口的宽高)
热门文章
- C++ friend关键字
- red flag linux指定域名,Red Flag Server 4.1 系统管理手册(适用桌面linux4.1) 6
- php 隐藏 div 代码,在HTML里用CSS隐藏div的方法
- arduino倾斜开关python语言_Arduino小白的学习记录:倾斜开关实验
- 【OpenCV 例程200篇】90. 频率域陷波滤波器
- seo vue 动态路由_VUE项目SEO问题的解决
- MDL锁导致mysql夯住_MySQL MetaData Lock 案例分享
- 20以内分数化小数表_如何使用标准正态分布表?
- java spring mvc api_SpringMVC实现REST API
- uniapp 输入框防抖节流_拉动一下控制台大小,后台请求数量爆炸,竟是没做好防抖与节流...