Message Oriented Middleware, MOM 消息中间件
消息中间件解决的问题:
JMS规范
官网:http://activemq.apache.org/
ActiveMQ下载
官网下载Windows版本:http://activemq.apache.org/activemq-5152-release.html

ActiveMQ启动
apache-activemq-5.15.2-bin\apache-activemq-5.15.2\bin\win64\activemq.bat
ActiveMQ web 管控台
管理界面URL:http://localhost:8161/

查看登录的用户名和密码 admin/admin
apache-activemq-5.15.2-bin\apache-activemq-5.15.2\conf\jetty-realm.properties
# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: admin, admin
user: user, user
ActiveMQ配置
- 设置安全机制,只有符合认证的用户才能进行发送和获取消息
apache-activemq-5.15.2-bin\apache-activemq-5.15.2\conf\activemq.xml 的<broker>节点最后添加如下插件
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="system" password="manager" groups="users,admins"/>
<authenticationUser username="user" password="password" groups="users"/>
<authenticationUser username="guest" password="password" groups="guests"/>
</users>
</simpleAuthenticationPlugin>
</plugins>
更多安全机制参考官方:http://activemq.apache.org/security.html
- 切换持久化
默认apache-activemq-5.15.2-bin\apache-activemq-5.15.2\conf\activemq.xml 中配置数据持久化到kahadb
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
切换为mysql, 其中mysql-ds被引用
PS: 注意要在 apache-activemq-5.15.2 的lib中添加driver、dbcp、common poil
<persistenceAdapter>
<jdbcPersistenceAdapter dataDirectory="activemq-data" dataSource="#mysql-ds"/>
</persistenceAdapter>
<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
<property name="username" value="activemq"/>
<property name="password" value="activemq"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
ActiveMQ Hello World
1.0 用 gradle init --type java-library初始化一个项目
2.0 添加依赖
Gradle
// https://mvnrepository.com/artifact/org.apache.activemq/activemq-all
compile group: 'org.apache.activemq', name: 'activemq-all', version: '5.15.2'
Maven
<!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.2</version>
</dependency>
3.0 hello world的简单实现
ActiveMQ API
session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
- 第一个参数表示是否开启事物,TRUE表示开启事务,开启以后session就需要调用commit和rollback方法来保证事务。
- 第二个参数表示 签收模式, 签收模式有三种
int AUTO_ACKNOWLEDGE = 1; 自动签收
int CLIENT_ACKNOWLEDGE = 2; 客户端签收 Message调用acknowledge表示签收
int DUPS_OK_ACKNOWLEDGE = 3;
void send(
Destination destination,
Message message,
int deliveryMode,
int priority,
long timeToLive)
destination 目标队列
message 发送的消息
deliveryMode 分发模式
DeliveryMode.NON_PERSISTENT = 1; 持久化到数据库中,重启MQ数据还可以消费,消费后,会从数据库中删除。
DeliveryMode.PERSISTENT = 2; 不持久化到数据库中,数据在内存中,重启MQ数据会丢失,无法消费了。
priority 消息优先级
需要在activemq.xml中配置 <policyEntry queue="queueName" prioritizedMessages="true"/>
timeToLive 消息的过期时间,单位为毫秒 过期的消息不能被消费, 但是认为这些消息被消费了。
网友评论