ActiveMQ配置参考手册

合集下载

(转)关于ActiveMQ的配置

(转)关于ActiveMQ的配置

(转)关于ActiveMQ的配置⽬前常⽤的消息队列组建⽆⾮就是MSMQ和ActiveMQ,⾄于他们的异同,这⾥不想做过多的⽐较。

简单来说,MSMQ内置于微软操作系统之中,在部署上包含⼀个隐性条件:Server需要是微软操作系统。

(对于这点我并去调研过MSMQ是否可以部署在⾮微软系统,⽐如:Linux,只是拍脑袋想了想,感觉上是不可以)。

对于ActiveMQ,微软系统和Linux都是可以部署的。

从功能⽅⾯来说,⼀般最常⽤的就是:消息的收/发,感觉差异不⼤。

从性能上来说,⼀般的说法是ActiveMQ略⾼。

在稳定性上,个⼈感觉MSMQ更好。

如果这两种常⽤队列都⽤过的同学,应该来说最⼤的差异在于:MSMQ如果要访问远程队列(⽐如机器A上的程序访问机器B上的队列),会⽐较恶⼼。

在数据量⽐较⼤的情况之下,⼀般来说队列服务器会专门的⼀台或者多台(多台的话,⽤程序去做热备+负载⽐较⽅便,也不需要额外的硬件成本。

简单来说做法可以这样:消息发送的时候随机向着多台队列服务器上发送消息;接受的时候开多个线程去分别监听;热备⽅⾯,可以维护⼀个带状态的队列连接池,如果消息收发失败那么将状态置为不可⽤,然后起⼀个线程去定时监测坏的连接是否可⽤,这个过程⼀般情况下可以不⽤加锁,为什么,⼤家根据各⾃需要去取舍吧)。

最近搞完了短彩信的⽹关连接服务,这两种队列我均使⽤了。

⼤致的过程是这样的:上层应⽤如果要发端彩信,那么将消息直接发送⾄ActiveMQ(⽬前⽤的就是上⾯说的多台热备+负载,因为实际中下⾏量⾮常⼤5千万条/天以上),然后端彩信⽹关连接服务部署多套,每套均依赖本机的MSMQ。

为什么呢?⽤ActiveMQ的原因是:上层应⽤程序和⽹关连接服务彼此独⽴,消息需要跨机访问。

⽤MSMQ的原因是:ActiveMQ中的数据是⼀条不分省的⼤队列,⽹关连接服务需要按省流控,所以端彩信⽹关连接服务:⾸先把消息从ActiveMQ取出来,然后存⾄本机上的分省MSMQ,这样做另外的⼀个好处就是:ActiveMQ不⾄于过多挤压,他的数据会分摊到N台短彩信⽹关连接服务所部署的机器上的MSMQ之中,也就说MSMQ可以起到分摊数据和缓冲的作⽤。

ActiveMQ学习-主从备份及安全配置

ActiveMQ学习-主从备份及安全配置

安装要求:1. 部署需要jdk1.5及以上,编译需要jdk1.5(java5)及以上, Java的环境变量(JAVA_HOME)必须设置,即jdk安装的目录,比如c:\Program Files\jsdk.1.62. 下载ActiveMQ,推荐5.0版本以上,这类版本带管理界面,可以看到队列、连接主机、发送消息等。

a.下载ActiveMQ 5.6.0 Release/download.html放到d盘 ,解压,如图:运行bin文件夹下的activemq.bat,出现如下图所示:3. 验证是否运行成功:ActiveMQ5.6的版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用:Admin:http://localhost:8161/admin/Demo:http://localhost:8161/demo/Demao界面:Admin应用界面:在浏览器中输入:http://localhost:8161/admin/,出现如下图所示表示成功:其中在导航菜单中,Queues是队列方式消息。

(在Queue Name 中输入要创建的队列名称,点击Create)使用该队列发送信息:发送信息后的队列信息为:点击队列名称test,进入如下界面:点击MessageID对应的内容,可以查看信息的详细信息:queue与topic的技术特点对比Subscribers消息订阅监控查询。

Connections可以查看链接数,分别可以查看xmpp、ssl、stomp、openwire、ws和网络链接。

Network是网络链接数监控。

Send可以发送消息数据。

4. 此时,ActiveMQ已经安装完成了,接下来配置登录监视控制台的用户名和密码。

打开conf文件夹下的jetty.xml,找到把authenticate属性的值改成true即可,重启activemq.bat,再登录监视控制台,就需要输入密码了,默认的用户名和密码是admin/admin。

ActiveMQ(中文)参考手册

ActiveMQ(中文)参考手册

1 JMS在介绍ActiveMQ之前,首先简要介绍一下JMS规范。

1.1 JMS的基本构件1.1.1 连接工厂连接工厂是客户用来创建连接的对象,例如ActiveMQ提供的ActiveMQConnectionFactory。

1.1.2 连接JMS Connection封装了客户与JMS提供者之间的一个虚拟的连接。

1.1.3 会话JMS Session是生产和消费消息的一个单线程上下文。

会话用于创建消息生产者(producer)、消息消费者(consumer)和消息(message)等。

会话提供了一个事务性的上下文,在这个上下文中,一组发送和接收被组合到了一个原子操作中。

1.1.4 目的地目的地是客户用来指定它生产的消息的目标和它消费的消息的来源的对象。

JMS1.0.2规范中定义了两种消息传递域:点对点(PTP)消息传递域和发布/订阅消息传递域。

点对点消息传递域的特点如下:• 每个消息只能有一个消费者。

• 消息的生产者和消费者之间没有时间上的相关性。

无论消费者在生产者发送消息的时候是否处于运行状态,它都可以提取消息。

发布/订阅消息传递域的特点如下:• 每个消息可以有多个消费者。

• 生产者和消费者之间有时间上的相关性。

订阅一个主题的消费者只能消费自它订阅之后发布的消息。

JMS规范允许客户创建持久订阅,这在一定程度上放松了时间上的相关性要求。

持久订阅允许消费者消费它在未处于激活状态时发送的消息。

在点对点消息传递域中,目的地被成为队列(queue);在发布/订阅消息传递域中,目的地被成为主题(topic)。

1.1.5 消息生产者消息生产者是由会话创建的一个对象,用于把消息发送到一个目的地。

1.1.6 消息消费者消息消费者是由会话创建的一个对象,它用于接收发送到目的地的消息。

消息的消费可以采用以下两种方法之一:• 同步消费。

通过调用消费者的receive方法从目的地中显式提取消息。

receive方法可以一直阻塞到消息到达。

ActiveMQ消息服务配置

ActiveMQ消息服务配置

ActiveMQ消息服务的目录结构如下:其中bin目录为运行目录,conf为配置目录,data为数据和日志目录。

消息服务启动为bin目录下的activemq.bat批处理文件(windows下)。

消息服务正式环境下建议安装为服务方式。

服务安装相关入口程序在bin\win32(64位操作系统为win64目录)目录下,运行InstallService.bat即可安装服务,UninstallService.bat可卸载服务。

如果运行报错,请到命令行中输入该批处理运行。

在win7或2008下如果安装报错则需要以管理员身份运行命令行,然后再运行相关批处理。

安装成功后在服务中会有名称为activemq的服务。

在win7或2008下服务启动报错(日志在data目录下的activemq.log、wrapper.log),过一段时间后会显示为非启动状态,此时查看日志是否报错,如果报错则尝试在bin\win32目录下增加work目录和temp目录再重启启动。

如果启动成功后在浏览器中输入http://127.0.0.1:8161/admin,出现activemq管理页面则说明安装成功。

消息服务的配置:1.内存配置消息服务的最大内存即java可用的最大内存在不同操作系统下不同java 版本是不一样的,在命令行中运行java -Xmx1512m –version(如果只安装了jre则到jre目录下的bin目录下运行),如果提示Error occurred during initialization of VM则说明不支持1512m内存,可减少128m再重复运行,直到找到jvm的最大内存。

然后到启动程序activemq.bat中找到if "%ACTIVEMQ_OPTS%" == "" set ACTIVEMQ_OPTS=-Xms1512M -Xmx1512MeDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties行,把Xms1512M和-Xmx1512M从1512调到测试出的java最大内存即可。

配置标准ActiveMQ组件--连接到ActiveMQ .

配置标准ActiveMQ组件--连接到ActiveMQ .

使用ActiveMQ看起来很简单直接:启动它,发送消息,接收消息。

但是你没有看到隐藏在这些步骤后面的细节。

理解这些细节和自定义配置需要更多的例子来说明。

虽然ActiveMQ提供了大量的配置选项,但是理解一些核心的选项对于大多数应用是很必要的。

第二部分深入到ActiveMQ关键的配置选项,包括连接,消息持久化,安全。

这三个主题是你使用ActiveMQ最先遇到的问题,所以率先理解它们很重要。

第4章:连接到ActiveMQ本章内容:∙ActiveMQ连接器URIs的描述和演示∙客户端如何使用传输连接器连接ActiveMQ∙如何使用网络连接器创建一个集群ActiveMQ消息代理器ActiveMQ等JMS代理器的目的是为客户端应用提供一个交互的架构。

所以,ActiveMQ提供连接器(connectors)。

连接器提供客户端到代理器的交互(使用transport connectors),和代理器间的交互(使用network connectors)。

ActiveMQ允许客户端使用各种协议进行连接,同时也运行代理器间通过连接通道来形成复杂的连接器网络。

这章我们先解释连接器URIs,它们是用来指明代理器的地址的。

之后,我们介绍传输连接器(transport connectors)以及有哪些协议可以用来连接ActiveMQ代理器。

注意:我们这里会用到连接器(connector)和协议(protocol)两个概念。

协议是一个通用的概念,而连接器是ActiveMQ特定的一个东西。

每个ActiveMQ连接器,实现一个特定的协议,并用它来作为自己的名字。

对于下面将的内容要注意我们是在讨论某个协议还是在讨论一个特定的ActiveMQ连接器。

我们先解释如果配置传输连接器。

然后,我们修改股票投资的例子,使之使用各种不同的连接器,并演示该例子。

看完该例子后,我们移到特定的连接器,讨论的传输连接器将包括TCP,SSL和H TTP。

接下来,我们将介绍使用VM协议的嵌入式代理器。

activeMQ集群的使用与配置

activeMQ集群的使用与配置

Clustering(集群)ActiveMQ从多种不同的方面提供了集群的支持。

1、Queue consumer clustersActiveMQ支持订阅同一个queue的consumers上的集群。

如果一个consumer 失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。

如果某个consumer的处理速度比其它consumers更快,那么这个consumer就会消费更多的消息。

需要注意的是,笔者发现AcitveMQ5.0版本的Queue consumer clusters存在一个bug:采用AMQ Message Store,运行一个producer,两个consumer,并采用如下的配置文件:那么经过一段时间后可能会报出如下错误:ERROR[ActiveMQTransport:tcp:///127.0.0.1:1843-RecoveryListenerAdapter.java:58-RecoveryListenerAdapter] Message id ID:versus-1837-1203915536609-0:2:1:1:419 could not be recovered from the data store!Apache官方文档说,此bug已经被修正,预定在5.1.0版本上体现。

2、Broker clusters一个常见的场景是有多个JMS broker,有一个客户连接到其中一个broker。

如果这个broker失效,那么客户会自动重新连接到其它的broker。

在ActiveMQ 中使用failover:// 协议来实现这个功能。

ActiveMQ3.x版本的reliable://协议已经变更为failover://。

如果某个网络上有多个brokers而且客户使用静态发现(使用Static Transport 或Failover Transport)或动态发现(使用Discovery Transport),那么客户可以容易地在某个broker失效的情况下切换到其它的brokers。

ActiveMQ开发手册范本

ActiveMQ开发手册范本

1. 背景当前,CORBA、DCOM、RMI等RPC中间件技术已广泛应用于各个领域。

但是面对规模和复杂度都越来越高的分布式系统,这些技术也显示出其局限性:(1)同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果后才能继续执行;(2)客户和服务对象的生命周期紧密耦合:客户进程和服务对象进程都必须正常运行;如果由于服务对象崩溃或者网络故障导致客户的请求不可达,客户会接收到异常;(3)点对点通信:客户的一次调用只发送给某个单独的目标对象。

面向消息的中间件(Message Oriented Middleware,MOM)较好的解决了以上问题。

发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接收者。

这种模式下,1)发送和接收是异步的,发送者无需等待;2)二者的生命周期未必相同:发送消息的时候接收者不一定运行,接收消息的时候发送者也不一定运行;3)一对多通信:对于一个消息可以有多个接收者。

已有的 MOM系统包括 IBM的 MQSeries、Microsoft的MSMQ和BEA的MessageQ等。

由于没有一个通用的标准,这些系统很难实现互操作和无缝连接。

Java Message Service(JMS)是 SUN提出的旨在统一各种 MOM系统接口的规,它包含点对点(Point to Point,PTP)和发布 /订阅(Publish/Subscribe,pub/sub)两种消息模型,提供可靠消息传输、事务和消息过滤等机制。

2.JMS概述2.1 JMS规JAVA 消息服务(JMS)定义了 Java 中访问消息中间件的接口。

JMS 只是接口,并没有给予实现,实现 JMS 接口的消息中间件称为 JMS Provider,例如 ActiveMQ。

2.2 术语JMS Provider:实现JMS 接口的消息中间件(provider:供应者);PTP:Point to Point,即点对点的消息模型;Pub/Sub:Publish/Subscribe,即发布/订阅的消息模型;Queue:队列目标; Topic:主题目标;Transaction:事务。

activeMQ操作手册

activeMQ操作手册

一、安装部署1、下载,下载0.0 Windows Distribution版本2、安装直接解压至任意目录(如:)3、启动 ActiveMQ效劳cmd到bin目录下直接运行: start启动成功:4、ActiveMQ消息治理后台系统:localhost:8161/admin(随包附带jetty、可直接启动)默许用户名:admin默许密码:admin※在conf/jetty-里能够修改用户和密码创建一个Queue二、Queue与 Topic 的比较1、JMS Queue 执行 load balancer语义:一条消息仅能被一个 consumer(消费者) 收到。

若是在 message 发送的时候没有可用的consumer,那么它将被保留一直到能处置该 message 的 consumer 可用。

若是一个consumer 收到一条 message 后却不响应它,那么这条消息将被转到另一个consumer 那儿。

一个 Queue 能够有很多 consumer,而且在多个可用的 consumer中负载均衡。

注:点对点消息传递域的特点如下:•每一个消息只能有一个消费者。

•消息的生产者和消费者之间没有时刻上的相关性。

不管消费者在生产者发送消息的时候是不是处于运行状态,它都能够提取消息。

2、Topic 实现 publish和 subscribe 语义:一条消息被 publish时,它将发到所有感爱好的定阅者,因此0到多个subscriber将接收到消息的一个拷贝。

可是在消息代理接收到消息时,只有激活定阅的subscriber能够取得消息的一个拷贝。

注:发布/定阅消息传递域的特点如下:•每一个消息能够有多个消费者。

•生产者和消费者之间有时刻上的相关性。

定阅一个主题的消费者只能消费自它定阅以后发布的消息。

JMS 标准予诺客户创建持久定阅,这在必然程度上放松了时刻上的相关性要求。

持久定阅许诺消费者消费它在未处于激活状态时发送的消息。

activeMQ集群配置

activeMQ集群配置

activeMQ集群配置目录ACTIVEMQ集群配置 (1)1ACTIVEMQ集群简介 (2)2MASTER/SLAVE模式简介 (3)2.1安装环境 (3)2.2测试服务器描述 (3)3JDK安装(略) (4)4ACTIVEMQ安装(PURE MASTER-SLAVE模式) (4)4.1主ACTIVE MQ安装 (4)4.2备ACTIVEMQ配置 (4)5ACTIVEMQ的BROKER CLUSTER模式 (6)5.1软件安装(略) (6)5.2配置文件修改 (6)1 activeMQ集群简介ActiveMQ可以做broker的集群(broker_cluster),也可以做master-slave方式的集群。

前者能在多个broker 之前fail-over和load-balance,但是在某个节点出故障时,可能导致消息丢失;而后者能实时备份消息,和fail-over,但是不能load-balance。

broker cluser的方式,在一个broker上发送的消息可以在其它的broker上收到。

当一个broker失效时,客户端可以自动的转到别的broker上运行,多个broker可以同时提供服务,但是消息只存储在一个broker上,如果那个broker失效了,那么客户端直到它重新启动后才能收到该broker 上的消息,假如很不幸,那个broker的存储介质坏了,那么消息就丢失掉了。

Master-slave方式中,只有master提供服务,slave只是实时的备份master的数据,所以消息不会丢失。

当master失效时,slave会自动升为master,客户端会自动转到slave上工作,所以能fail-over。

由于只有master 提供服务,所以不能将负载分到多个broker上。

其实单个broker的性能已经是相当的惊人了,足够公司目前的需要了,而公司并不希望丢失任何数据,所以我们选择使用master-slave模式。

ActiveMQ配置及使用

ActiveMQ配置及使用

一、配置ActiveMQ首先下载ActiveMQ,推荐5.0版本以上,这类版本带管理界面,可以看到队列、连接主机、发送消息等。

下面以5.4.3版本为例。

找到ActiveMQ的根目录,进入bin文件夹,点击activemq.bat,就启动了ActiveMQ服务器。

默认连接URI为tcp://localhost:61616。

这个可以在conf文件夹下的activemq.xml文件中配置。

下面这个节点就是配置连接URI<transportConnectors><transportConnector uri="http://127.0.0.1:1414"/></transportConnectors>这个可以配置多个URI,使用ActiveMQ默认包(activemq-all-5.4.3.jar)可以配置tcp和nio协议的URI,像上面配置成http协议的需要添加几个包,分别是xstream-1.3.1.jar,commons-httpclient-3.1.jar ,xpp3_min-1.1.4c.jar。

启动ActiveMQ成功后界面如下:上面那个是连接URI,下面那个是管理界面URI。

管理界面如下:在queue和topics里面可以查看发送到服务器的队列和话题。

Connections里面可以看到连接的客户端。

二、测试JMS下面开始使用Spring2.0加activeMQ5.4.3进行jms发送及接收。

首先创建一个web project目录结构如下:需要Spring2.0的相关jar包,以及sping.jar,activemq-all-5.43..jar, xpp3_min-1.1.4c.jar, xstream-1.3.1.jar。

下面是代码:Receiver.java 的代码如下:package com.suning.jms;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.TextMessage;import org.springframework.jms.core.JmsTemplate;public class Receiver {/** Spring的Jms模板 **/private JmsTemplate jmsTemplate;public String receiveMessage(){// 获取消息,转换成MapMessage// MapMessage message = (MapMessage)jmsTemplate.receive();String mess=new String();// 获取消息,转换成TextMessageTextMessage message = (TextMessage)jmsTemplate.receive();try {// // 获取MapMessage消息内容// mess = message.getString("mess");// 获取TextMessage消息内容mess = message.getText();} catch (JMSException e) {e.printStackTrace();}return mess;}public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) { this.jmsTemplate = jmsTemplate;}}Sender.java代码如下:package com.suning.jms;import javax.jms.JMSException;import javax.jms.MapMessage;import javax.jms.Message;import javax.jms.Session;import javax.jms.TextMessage;import org.springframework.jms.core.JmsTemplate;import org.springframework.jms.core.MessageCreator;public class Sender {/** Spring的Jms模板 **/private JmsTemplate jmsTemplate;public void Send(final String messInfo){// 使用JmsTemplate发送消息jmsTemplate.send(new MessageCreator() {// 创建消息public Message createMessage(Session session) throws JMSException {// // Map类型的消息// MapMessage message = session.createMapMessage();//// message.setString("mess", messInfo);// Text类型消息(其他还有字节类型,流类型等)TextMessage mess = session.createTextMessage(messInfo);return mess;}});}public JmsTemplate getJmsTemplate() {return jmsTemplate;}public void setJmsTemplate(JmsTemplate jmsTemplate) {this.jmsTemplate = jmsTemplate;}}Test.java的代码如下:package com.suning.jms;import org.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {// 获取Spring的ApplicationContextApplicationContext context = newClassPathXmlApplicationContext("applicationContext.xml");// 使用spring实例一个beanSender sender = (Sender) context.getBean("sender");// 发送消息sender.Send("test");// 使用spring实例一个beanReceiver receiver = (Receiver) context.getBean("receiver");// 接收消息String message = receiver.receiveMessage();System.out.println(message);}}applicationContext.xml内容如下:<?xml version="1.0"encoding="UTF-8"?><beansxmlns="/schema/beans"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/schema/beans /schema/beans/spring-beans-2.0.xsd"><!-- 消息工厂 --><bean id="connectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory"><property name="brokerURL" value="http://127.0.0.1:1414"/> </bean><!-- 消息队列 --><bean id="userDestination"class="mand.ActiveMQQueue"><constructor-arg index="0"value="Test_Queue" /> </bean><!-- JMSTemplate --><bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory"/><!-- 默认消息目标 --><property name="defaultDestination" ref="userDestination"/><!-- 接收超时时间 --><property name="receiveTimeout" value="60000"/></bean><bean id="sender"class="com.suning.jms.Sender"><property name="jmsTemplate"ref="jmsTemplate"></property> </bean><bean id="receiver"class="com.suning.jms.Receiver"><property name="jmsTemplate"ref="jmsTemplate"></property> </bean></beans>配置好之后记得将applicationContext.xml放到WEB-INF的classes文件夹下面,貌似它不能自动传到classes文件夹下面。

ActiveMQ客户端使用手册

ActiveMQ客户端使用手册

3.2.客户端异常的处理客户端必须对如下异常进行处理:∙确保异常后数据能重新发送接收和与MQ重连∙消费者发生异常,应该优先考虑本地持久化重试,如果抛出了异常,造成消息没有消费,则会保留在MQ中一段时间,这时可能会阻塞新消息的处理。

∙消费者如果发生逻辑业务异常,例如某个信息错误,造成业务无法处理,也应该消费该条消息,记录下日志。

3.3.数据包大小消息大小的约束:推荐几K级别的消息,如果消息很大,采用技术减少消息体大小;减少标记的长度,采用JSON 格式替换XML,采用压缩格式。

3.4.开发及测试MQ服务器地址开发环境测试环境线上正式环境(使用非集群客户端需要直接连接MQ的请联系石冠雄)4.通用设置点对点的消息使用Queue模式;发有限布订阅模式的消息采用VirtualTopic模式,即每个消费者都有一个专用的Queue。

系统代码:字母开头,字母和数字组合消息类型代码:字母开头,字母、数字和下划线组合5.集群ActiveMQ客户端适用于原先没有使用JQ发送消息或是新的系统使用,具有如下特点:∙支持固定的MQ服务器,用于开发环境∙支持从Zookeepr获取管理端分配的MQ服务器,动态扩容∙支持异常递减分流,支持自定义异常立即完全切换到其他服务器分流∙支持MQ服务健康检测恢复分流∙支持异常重试,发送给一组MQ失败后,自动发送给其它组MQ5.1.Maven依赖:spring 3spring 2.5xmlSchema配置5.2.消息转换器及消息监听器委托配置(可选):集成了Xml、JSON、Hessian格式的转换类已经实现完毕,例如:spring普通消息监听器委托(重要:请不要注入带有返回值的方法)5.3.重试服务配置(推荐,可选)生产端以及消费端的数据库失败重试服务,可以将生产或是消费出现异常的消息先移动到数据库,不影响MQ的主线程工作。

MQ服务器提供方式:address 的配置5.5.发送端配置获取实例普通发送方式转换器发送方式批量发送方式转换器批量发送方式5.6.接收端配置:注意:目前批量消费接口在归档记录上存在一定问题,无法完整记录所有的消费记录,使用时请注意6.Java JQ兼容性客户端适用于原先使用JQ发送消息的Java系统,重新修改代码工作量大,采用原接口不改动的设计,最大程度兼容原有客户端。

Java后台开发ActiveMQ使用手册

Java后台开发ActiveMQ使用手册

Java后台开发ActiveMQ使用手册Java后台开发ActiveMQ使用手册 (1)1. 什么是ActiveMQ (2)1.1. 介绍 (2)1.2. ActiveMQ的消息形式 (2)2. ActiveMQ服务器的安装 (3)3. ActiveMQ的三种使用模式 (4)3.1. Queue点对点模式 (5)3.1.1 构建Producer生产者 (5)3.1.2 构建Consumer消费者 (6)3.2. Topic发布订阅模式 (8)3.1.1 构建Producer生产者 (8)3.1.2 构建Consumer消费者 (9)3.3. Spring整合模式 (11)3.3.1 配置Spring和ActiveMQ配置文件 (11)3.3.2 生产者发送消息 (12)3.3.3 消费者接收消息 (13)1. 什么是ActiveMQ1.1. 介绍ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。

ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

1.2. ActiveMQ的消息形式ActiveMQ对于消息的传递有两种类型:第一种:点对点的,即一个生产者和一个消费者一一对应。

第二种:发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。

对于消息正文格式,以及调用的消息类型。

JMS定义了五种,允许发送并接收一些不同形式的数据。

·StreamMessage -- Java原始值的数据流·MapMessage--一套名称-值对·TextMessage--一个字符串对象·ObjectMessage--一个序列化的Java对象·BytesMessage--一个字节的数据流2. ActiveMQ服务器的安装ActiveMQ是java语言开发的,需要使用到jdk,这里介绍在Linux系统种进行安装。

ActiveMQ(中文)参考手册

ActiveMQ(中文)参考手册

1 JMS在介绍Ac‎t iveM‎Q之前,首先简要介‎绍一下JM‎S规范。

1.1 JMS的基‎本构件1.1.1 连接工厂连接工厂是‎客户用来创‎建连接的对‎象,例如Act‎i veMQ‎提供的Ac‎t iveM‎Q Conn‎e ctio‎n Fact‎o ry。

1.1.2 连接JMS Conne‎c tion‎封装了客户‎与JMS提‎供者之间的‎一个虚拟的‎连接。

1.1.3 会话JMS Sessi‎o n是生产‎和消费消息‎的一个单线‎程上下文。

会话用于创‎建消息生产‎者(produ‎c er)、消息消费者‎(consu‎m er)和消息(messa‎g e)等。

会话提供了‎一个事务性‎的上下文,在这个上下‎文中,一组发送和‎接收被组合‎到了一个原‎子操作中。

1.1.4 目的地目的地是客‎户用来指定‎它生产的消‎息的目标和‎它消费的消‎息的来源的‎对象。

JMS1.0.2规范中定‎义了两种消‎息传递域:点对点(PTP)消息传递域‎和发布/订阅消息传‎递域。

点对点消息‎传递域的特‎点如下:•‎每个消息只‎能有一个消‎费者。

•‎消息的生产‎者和消费者‎之间没有时‎间上的相关‎性。

无论消费者‎在生产者发‎送消息的时‎候是否处于‎运行状态,它都可以提‎取消息。

发布/订阅消息传‎递域的特点‎如下:•‎每个消息可‎以有多个消‎费者。

•‎生产者和消‎费者之间有‎时间上的相‎关性。

订阅一个主‎题的消费者‎只能消费自‎它订阅之后‎发布的消息‎。

JMS规范‎允许客户创‎建持久订阅‎,这在一定程‎度上放松了‎时间上的相‎关性要求。

持久订阅允‎许消费者消‎费它在未处‎于激活状态‎时发送的消‎息。

在点对点消‎息传递域中‎,目的地被成‎为队列(queue‎);在发布/订阅消息传‎递域中,目的地被成‎为主题(topic‎)。

1.1.5 消息生产者‎消息生产者‎是由会话创‎建的一个对‎象,用于把消息‎发送到一个‎目的地。

1.1.6 消息消费者‎消息消费者‎是由会话创‎建的一个对‎象,它用于接收‎发送到目的‎地的消息。

activemq配置说明

activemq配置说明

Activemq配置说明1 概述以及activemq集群方案选择 (2)1.1 consumers的集群 (2)1.2 brokers的集群 (2)1.3 集群方案的选择 (2)2 服务端配置activemq配置 (2)2.1 服务端配置activemq.xml (2)2.2 客户端配置backend-mq-consumer.xml (3)3 测试 (4)3.1 采用单机方式,同步方式 (4)3.2 采用单机方式,异步方式 (4)4 待解决的问题 (5)1概述以及activemq集群方案选择1.1consumers的集群ActiveMQ支持订阅同一个queue的consumers上的集群。

如果一个consumer失效,那么所有未被确认(unacknowledged)的消息都会被发送到这个queue上其它的consumers。

如果某个consumer的处理速度比其它consumers更快,那么这个consumer就会消费更多的消息。

1.2brokers的集群在一个网络内运行多个brokers或者stand alone brokers时存在一个问题,这就是消息在物理上只被一个broker持有,因此当某个broker失效,那么你只能等待直到它重启后,这个broker上的消息才能够被继续发送(如果没有设置持久化,那么在这种情况下,消息将会丢失)。

1.3集群方案的选择经筛选我们采用主--从方式,Master Slave 背后的想法是,消息被复制到slave broker,因此即使master broker遇到了像硬件故障之类的错误,你也可以立即切换到slave broker而不丢失任何消息。

Master Slave是目前ActiveMQ推荐的高可靠性和容错的解决方案。

并且我们采用文件系统做持久化,即:Shared File System Master Slave。

可以运行多个broker,这些broker共享数据目录。

activemq消息队列的大小配置的配置

activemq消息队列的大小配置的配置

activemq消息队列的⼤⼩配置的配置在⽹上有⼈问,如何在activemq.xml⾥⾯配置消息队列的⼤⼩,这样才保证队列不会溢出!如果采⽤⾮持久化消息,那么当⼤量发送失败时候,⾸先⼤量占⽤内存。

造成消息堆积,容易造成内存溢出,所以个⼈⽐较倾向于持久化消息的同时配合其他⽅式的master/slave或者failover机制,尽量保持消息的畅通。

当我们开发的Java的使⽤应⽤程序的时候,有的时候需要为java应⽤指定对应的内存⼤⼩。

当在测试的时候,有的同学也许会遇到ActiveMQ报内存不⾜的问题,我们可以修改ActiveMQ使⽤的内存的多少类似Java 的内存的设置,在ActiveMQ.bat或者activemq(linux)⽂件中如下:if "%ACTIVEMQ_BASE%" == "" set ACTIVEMQ_BASE=%ACTIVEMQ_HOME%if "%ACTIVEMQ_OPTS%" == "" set ACTIVEMQ_OPTS=-Xmx512M eDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.p if "%SUNJMX%" == "" set SUNJMX=-Dcom.sun.management.jmxremote其中ACTIVEMQ_OPTS中指定ActiveMQ的使⽤的内存的⼤⼩。

下⾯为ActiveMQ的内存分配信息。

activemq.xml中的配置情况:<!--The systemUsage controls the maximum amount of space the broker willuse before slowing down producers. For more information, see:/producer-flow-control.html<systemUsage sendFailIfNoSpaceAfterTimeout="3000" sendFailIfNoSpace="true"><systemUsage><memoryUsage><memoryUsage limit="20 mb"/></memoryUsage><storeUsage><storeUsage limit="1 gb"/></storeUsage><tempUsage><tempUsage limit="100 mb"/></tempUsage></systemUsage></systemUsage>-->memoryUsage:表⽰所有队列对象占⽤的内存⼤⼩为20mb;AbstractPendingMessageCursor计算空间的⽅法源代码如下:public boolean hasSpace() {return systemUsage != null ? (systemUsage.getMemoryUsage().getPercentUsage() < memoryUsageHighWaterMark) : true;}public boolean isFull() {return systemUsage != null ? systemUsage.getMemoryUsage().isFull() : false;}ActiveMQ消息持久化在broker中设置属性persistent=”true”(默认是true),同时发送的消息也应该是persitent类型的。

activemq的安全设置

activemq的安全设置
destroy-method="stop">
<property name="connectors">
<list>
<bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
一:activeMQ的管理后台 http://localhost:8161/admin 默认用户名密码admin admin
默认端口8061,采用的JETTY服务器,所以修改端口啊密码啊也是改JETTY的配置jetty.xml jetty-realm.xml
我已把密码改为weigq 端口改为8191
<users>
<authenticationUser username="${ername}" password="${activemq.password}" groups="users,admins"/>
</users>
<property name="port" value="8191" />
</bean>
二:activeMQ消息使用者的端口,用户名,密码
在activemq.xml中修改。
端口容易改,默认是61616,我给改为61617
要改用户名密码,须在<broker>标签里的<sysgins is added by weigq .use for setting uid and pwd by msg users -->

Active MQ教程+配置

Active MQ教程+配置

ActiveMQ-陈波Active MQ是一个基于Apcache 2.0licenced发布,开放源码的JMS产品。

其特点为:1)提供点到点消息模式和发布/订阅消息模式;2)支持JBoss、Geronimo等开源应用服务器,支持Spring框架的消息驱动;3)新增了一个P2P传输层,可以用于创建可靠的P2P JMS网络连接;4)拥有消息持久化、事务、集群支持等JMS基础设施服务。

Apache activemq是最受欢迎和最强大的开源消息中间件。

Apache activemq是非常快速的,支持多种跨客户端语言和协议,并且还有许多先进功能。

Apache activemq完全遵守JMS1.1和J2EE 1.4规范。

Apache activemq是在Apache 2.0License许可下发布的。

一.ActiveMQ是什么?ActiveMQ is the most popular and powerful open source MessageBus.ActiveMQ是一个完全支持JMS1.1和J2EE1.4规范的JMS Provider实现,尽管JMS 规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

下面是它的特性列表1.多种语言和协议编写客户端。

语言:Java,C,C++,C#,Ruby,Perl,Python,PHP。

应用协议:OpenWire,Stomp REST,WS Notification,XMPP,AMQP2.完全支持JMS1.1和J2EE1.4规范(持久化,XA消息,事务)3.对Spring的支持,ActiveMQ可以很容得内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性4.通过了常见J2EE服务器(如Geronimo,JBoss4,GlassFish,WebLogic)的测试,其中通过JCA1.5resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE1.4商业服务器上5.支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA6.支持通过JDBC和journal提供高速的消息持久化7.从设计上保证了高性能的集群,客户端-服务器,点对点8.支持Ajax9.支持与Axis的整合10.可以很容易得调用内嵌JMS provider,进行测试二.ActiveMQ的竞争者1,其他开源JMS provider(资料来自):jbossmq(jboss4)jboss messaging(jboss5)joram-4.3.212006-09-22openjms-0.7.7-alpha-3.zip December26,2005mantamqubermqSomnifugiJMS2005-7-27开源的JMS Provider大部分都已经停止发展了,剩下的几个都是找到了东家,和某种J2EE 服务器挂钩,比如jboss mq与jboss,joram与jonas(objectweb组织),ActiveMQ与Geronimo(ASF APACHE基金组织),而在这3个之间,从网络底层来看,只有ActiveMQ使用了NIO,单从这个角度来看ActiveMQ在性能上会有一定的优势。

ActiveMQ安装与配置

ActiveMQ安装与配置

ActiveMQ安装与配置1、环境:Windows XPapache-activemq-5.2.0-bin.zip2、安装解压缩到apache-activemq-5.2.0-bin.zip到一个目录,比如C:\apache-activemq-5.2.03、配置配置就在C:\apache-activemq-5.2.0\conf目录下三个文件activemq.xmlcredentials.propertieslog4j.properties4、启动ActiveMQ运行C:\apache-activemq-5.2.0\bin\activemq.bat5、测试ActiveMQ默认使用的TCP连接端口是61616, 通过查看该端口的信息可以测试ActiveMQ是否成功启动 netstat -an|find "61616"C:\Documents and Settings\Administrator>netstat -an|find "61616"TCP 0.0.0.0:61616 0.0.0.0:0 LISTENING 6、监控ActiveMQ5.0版本默认启动时,启动了内置的jetty服务器,提供一个demo应用和用于监控ActiveMQ的admin应用。

admin:http://127.0.0.1:8161/admin/demo:http://127.0.0.1:8161/demo/具体端口查看:apache-activemq-5.2.0/conf/activemq.xml<jetty xmlns="/schemas/jetty/1.0"><connectors><nioConnector port="8161"/></connectors><handlers><webAppContext contextPath="/admin"resourceBase="${active mq.base}/webapps/admin"logUrlOnStart="true"/><!--<webAppContext contextPath="/demo" resourceBase="${active mq.base}/webapps/demo" logUrlOnStart="true"/><webAppContext contextPath="/fileserver" resourceBase="${ac tivemq.base}/webapps/fileserver" logUrlOnStart="true"/>--></handlers></jetty>从官方下载的ActiveMQ中下载的文件解压后,默认JMX的关闭的<!-- Use the following to configure how ActiveMQ is exposed in JMX --> <managementContext><managementContext createConnector="false"/></managementContext>需要对之进行修改,打开JMX的访问<managementContext><managementContext createConnector="true"connectorPort="1 199"/></managementContext>在启动的过程中注意观察以下输出的结果:INFO ManagementContext - JMX consoles can connect to s ervice:jmx:rmi:///jndi/rmi://localhost:1199/jmxrmiINFO TransportServerThreadSupport - Listening for connections at: tcp://q a-qd-63-17:61616ActiveMQ问题记录/1081650/384063ActiveMQ的服务是随机器启动的(当你安装了他的服务之后,默认是不安装的,不过有时候会不经意安装),这时候你再用Spring启动ActiveMQ就会报如上的错误。

ActiveMQ配置参考手册

ActiveMQ配置参考手册

ActiveMQ配置参考手册1ActiveMQ Server端配置1.1 设置Broker名字修改%activemq%/conf/activemq.xml文件1.2设置persistenceAdapter修改%activemq%/conf/activemq.xml文件1.3 设置destinationPolicy打开%activemq%/conf/activemq.xml文件,添加如下红色配置属性:1.4设置networkConnectors修改%activemq%/conf/activemq.xml文件1.5 设置transportConnectors 修改%activemq%/conf/activemq.xml文件2ActiveMQ Client端连接配置目前Client端使用Failover协议组合TCP协议的方式连接broker,示例如下:可以看到,tcp协议和failover协议分别支持一些不同的连接配置参数。

如示例URL中的soTimeout和randomize。

下面就TCP协议和Failover协议的连接配置参数分别进行详细介绍。

2.1TCP连接参数配置2.1.1The TCP Transport Options2.1.2The OpenWire Wire Format OptionsOpenWire is the default Wire Format that ActiveMQ uses. It provides a highly efficent binary format for high speed messaging. OpenWire options can be configured on a JMS client's2.2Failover协议参数配置The Failover configuration syntax allows you to specify any number of composite uris. The Failover transport randomly chooses one of the composite URI and attempts to establish a connection to it. If it does not succeed or if it subsequently fails, a new connection is established to one of the other uris in the list.2.2.1The Failover Transport OptionsNotesIf you use failover, and a broker dies at some point, your sends will block by default. Using TransportListener can help with this regard. It is best to set the Listener directly on the ActiveMQConnectionFactory so that it is in place before any request that may require an network hop.Additionally you can use timeout option which will cause your current send to fail after specified timeout. The following URL, for example:will cause send to fail after 3 seconds if the connection isn't established. The connection will not be killed, so you can try sending messages later at some point using the same connection (presumably some of your brokers will be available again). Timeouts on the failover transport are available since 5.3 version.大意如下:在使用failover协议时,如果broker发生僵死的情况,则在默认情况下消息生产者将会被阻塞。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ActiveMQ配置参考手册1ActiveMQ Server端配置1.1 设置Broker名字修改%activemq%/conf/activemq.xml文件1.2设置persistenceAdapter修改%activemq%/conf/activemq.xml文件1.3 设置destinationPolicy打开%activemq%/conf/activemq.xml文件,添加如下红色配置属性:1.4设置networkConnectors修改%activemq%/conf/activemq.xml文件1.5 设置transportConnectors 修改%activemq%/conf/activemq.xml文件2ActiveMQ Client端连接配置目前Client端使用Failover协议组合TCP协议的方式连接broker,示例如下:可以看到,tcp协议和failover协议分别支持一些不同的连接配置参数。

如示例URL中的soTimeout和randomize。

下面就TCP协议和Failover协议的连接配置参数分别进行详细介绍。

2.1TCP连接参数配置2.1.1The TCP Transport Options2.1.2The OpenWire Wire Format OptionsOpenWire is the default Wire Format that ActiveMQ uses. It provides a highly efficent binary format for high speed messaging. OpenWire options can be configured on a JMS client's2.2Failover协议参数配置The Failover configuration syntax allows you to specify any number of composite uris. The Failover transport randomly chooses one of the composite URI and attempts to establish a connection to it. If it does not succeed or if it subsequently fails, a new connection is established to one of the other uris in the list.2.2.1The Failover Transport OptionsNotesIf you use failover, and a broker dies at some point, your sends will block by default. Using TransportListener can help with this regard. It is best to set the Listener directly on the ActiveMQConnectionFactory so that it is in place before any request that may require an network hop.Additionally you can use timeout option which will cause your current send to fail after specified timeout. The following URL, for example:will cause send to fail after 3 seconds if the connection isn't established. The connection will not be killed, so you can try sending messages later at some point using the same connection (presumably some of your brokers will be available again). Timeouts on the failover transport are available since 5.3 version.大意如下:在使用failover协议时,如果broker发生僵死的情况,则在默认情况下消息生产者将会被阻塞。

可以使用TransportListener或者在连接broker URL中增加timeout参数的方式来解决这个问题。

若使用后者,则发送消息超过指定超时时间后,将会抛出一个JMS异常。

但值得注意的是,该无效的连接并不会被“杀死”。

3ActiveMQ性能调优3.1持久化(persistent)Using persistent messaging is quite a bit slower than non-persistent messaging. Many things are a tradeoff in IT between performance and quality of service.With non-persistent messaging, things are reliable - unless the broker is killed in which case any messages in the broker are lost. Persistent messaging avoids this by ensuring by default that every message is written to disk before the MessageProducer.send() method returns.Even if you need persistent messaging there are various things you can do to speed things up - such as do you really need to block the sender to wait until the message is physically on disk on the broker before being able to send another message? There now follows a number of options you can consider if you need the extra safety of persistent messaging.到底采取何种持久化方式,应取决于具体应用对性能(performance)和服务质量(QOS)这两个因素的要求。

如果是性能要求较高的话则建议采用非持久化方式;如果对服务质量要求较高则建议采用持久化方式。

下表列出了目前可选的持久化方式(注:下表按消息发送&消费速度由高到低的顺序排列):从安全性和性能的综合角度考虑,我们建议选择KahaDB持久化方式。

3.2事务If you are using persistent messaging and you don't want to use Async Sends then you should use JMS transactions to batch up many operations inside a single transaction. Even if you have to pay the performance cost of XA transactions - using batching (processing and sending many messages in a single transaction (JMS or XA) will boost performance considerably. This is because you share the synchrony cost (the waiting for things to be written and sync'd to disk) across many many messages.3.3异步发送If you enable Async Sends then you will reduce the blocking in senders which increases throughput.采用异步发送是为了提高生产者发送消息的速度(在消息持久化的场合下可能会引起消息丢失),因此可以在生产能力不足时酌情使用。

注:默认情况下发送持久化消息是采取同步方式的,这样在broker将每一条消息进行持久化并向生产者返回应答(acknowledgement)之前,生产者的发送方法将会产生阻塞。

如果采用异步发送,生产者将不再等待来自broker的应答,此时若broker一旦宕机,则无法保证每条已发送的消息都被写入持久化介质(如物理文件等)。

3.4增加prefetch大小ActiveMQ will push as many messages to the consumer as fast as possible, where they will be queued for processing by an ActiveMQ Session. The maximum number of messages that ActiveMQ will push to a Consumer without the Consumer processing a message is set by thepre-fetch size. You can improve throughput by running ActiveMQ with larger pre-fetch sizes. Pre-fetch sizes are determined by the ActiveMQPrefetchPolicy bean, which is set on the ActiveMQ ConnectionFactory.ActiveMQ uses a prefetch size to determine how many messages are streamed to a JMS consumer. The higher this number then typically the higher the throughput of the consumers as it typically means under heavy message load then the consumer always has more messages available immediately in RAM for processing - rather than having to wait for messages to be read and parsed from a socket.适用于消息消费速度较快的场合,采用更大的prefetch size以防止消费者进入等待状态。

相关文档
最新文档