ActiveMQ

作者: zheting | 来源:发表于2018-01-30 09:54 被阅读49次

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 消息的过期时间,单位为毫秒 过期的消息不能被消费, 但是认为这些消息被消费了。

相关文章

网友评论

      本文标题:ActiveMQ

      本文链接:https://www.haomeiwen.com/subject/acnraxtx.html