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