1、ActiveMQ--起手问题记录

引言

    activeMQ是很是流行的消息中间件,最近在下载完后遇到几个问题,以为有必要写这篇博文做为记录整个起手的过程。java

问题描述

    一、下载完activeMQ后,打开bin目录下的activeMQ.bat,不管怎么点击都会闪退?mysql

    二、http://localhost:8161/admin   这个地址的用户名和密码如何设置?web

问题解决

    一、 后面咨询了下大佬,才发现问题很低级,就是其实activeMQ在window下跑是会分32位和64位的,个人电脑系统是64位的windows,须要点击64文件夹下面的activeMQ.bat,ok开启后控制台界面是下面这样的了:sql

 

 

 

 

 

 

 

 

    二、在 mq安装目录/conf/jetty.xml中,开启权限控制数据库

同时在/conf/jetty-realm.properties添加用户apache

启动

    解决了上面问题之后就能够开始开心的玩耍了,首先启动mq客户端,而后登录消息管理页面,默认是在8161这个端口上,点击消息代理管理链接:windows

    会提示你输入用户名和密码,就是上面问题2中设置的:api

    输入之后,就会跳转到管理页面,具体能够自行点击体验:session

    好比进入消息队列页面,能够看到列表页有一个名为FirstQueue的消息队列,还有该队列的待消费消息数量,消费消息数量,入列消息数量,出列消息数量等信息。jsp

这边的操做列还提供了手动发送消息的功能:

    点击发送之后,在开启的消费端能够收到下面的消息:

    考虑到宕机问题,咱们通常须要对发送的消息进行持久化,

producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); //设置消息持久化
sendMsg(session,producer);
session.commit();

    持久化带来的好处就是,宕机重启好,消息不会丢失,宕机前未消费的消息,能够在重启后,从新消费。

    持久化存放的地址在apache-activemq\conf\activemq.xml在越80行会发现默认的配置项:

        <persistenceAdapter>
            <kahaDB directory="${activemq.data}/kahadb"/>
        </persistenceAdapter>

    上面默认使用的是kahaDB,是一个基于文件支持事务的消息存储器,是一个可靠,高性能,可扩展的消息存储器,固然咱们还可使用mysql等数据库做为持久化目的地,具体配置(在activeMQ.xml)和web项目中配置数据源如出一辙(须要下载mysql-connector包到activeMQ的lib包下)。

    上面说的是点对点方式的持久化,对于订阅和消费模式,其实也有持久化的问题,持续订阅和非持续订阅,是针对“订阅-发布”模式的细分处理策略,在JMS规范中的标准称呼是:Durable-Subscribers和Non-Durable Subscribers。
    Durable-Subscribers:是指在“订阅-发布”模式下,即便标记为Durable-Subscribers的订阅者下线了(多是由于订阅者宕机,也多是由于这个订阅者故意下线),“订阅-发布”模式的Topic队列也要保存这些消息(视消息不一样的持久化策略影响,保存机制不同),直到下次这个被标记为Durable-Subscribers的订阅者从新上线,并正确处理这条消息为止。换句话说,标记为Durable-Subscribers的订阅者是否能得到某条消息,和它是否曾经下线没有任何关系。
    Non-Durable Subscribers:是指在“订阅-发布”模式下,“订阅-发布”模式的Topic队列不用为这些已经下线的订阅者保留消息。当后者将消息按照既定的广播规则发送给当前在线的订阅者后,消息就能够被标记为“处理完成”。

    具体在操做的是以下:

// 建立持久订阅的时候,必需要设置client,不然会报错:  
// 若是clientID重复(已经存在相同id的活动链接),会报错  
// javax.jms.InvalidClientIDException: Broker: localhost - Client: 1  
// already connected from tcp://127.0.0.1:2758  
connection.setClientID("1");  
  
TopicSession session = connection.createTopicSession(false,Session.AUTO_ACKNOWLEDGE);  
// 在同一个链接的ClientID下,持久订阅者的名称必须惟一  
// javax.jms.JMSException: Durable consumer is in use for client: 1 and  
// subscriptionName: 11         
TopicSubscriber subscriber = session.createDurableSubscriber(topic,"11");

总结

    其实activeMQ其实仍是挺简单的,api也很简洁,从目前来看activeMQ支持的五种消息类型来讲(消息类型JMS规范中的消息类型包括TextMessage、MapMessage、ObjectMessage、BytesMessage、和StreamMessage),可作的事情很是多,能够多尝试下,下一篇大概介绍一下activeMQ的应用场景。

相关文章
相关标签/搜索