ActiveMQ中Broker的应用与启动方式
Broker:英语有代理的意思,在activemq中,Broker就相当于一个Activemq实例。
1. 命令行启动实例:
1.activemq start使用默认的activemq.xml启动
E:\activemq\apache-activemq-5.15.6\bin>pwd /e/activemq/apache-activemq-5.15.6/bin E:\activemq\apache-activemq-5.15.6\bin>ls activemq activemq.bat win32 wrapper.jar activemq-admin.bat activemq.jar win64 E:\activemq\apache-activemq-5.15.6\bin>activemq.bat Java Runtime: Oracle Corporation 1.8.0_121 C:\Program Files\Java8\jdk1.8.0_121\jre Heap sizes: current=1005056k free=989327k max=1005056k JVM args: -Dcom.sun.management.jmxremote -Xms1G -Xmx1G -Djava.util.logging.config.file=logging.properties -Djava.se urity.auth.login.config=E:\activemq\apache-activemq-5.15.6\bin\..\conf\login.config -Dactivemq.classpath=E:\activemq\ap che-activemq-5.15.6\bin\..\conf;E:\activemq\apache-activemq-5.15.6\bin\../conf;E:\activemq\apache-activemq-5.15.6\bin\. /conf; -Dactivemq.home=E:\activemq\apache-activemq-5.15.6\bin\.. -Dactivemq.base=E:\activemq\apache-activemq-5.15.6\bin .. -Dactivemq.conf=E:\activemq\apache-activemq-5.15.6\bin\..\conf -Dactivemq.data=E:\activemq\apache-activemq-5.15.6\bi \..\data -Djava.io.tmpdir=E:\activemq\apache-activemq-5.15.6\bin\..\data\tmp Extensions classpath: [E:\activemq\apache-activemq-5.15.6\bin\..\lib,E:\activemq\apache-activemq-5.15.6\bin\..\lib\camel,E:\activemq\apache activemq-5.15.6\bin\..\lib\optional,E:\activemq\apache-activemq-5.15.6\bin\..\lib\web,E:\activemq\apache-activemq-5.15. \bin\..\lib\extra] ACTIVEMQ_HOME: E:\activemq\apache-activemq-5.15.6\bin\.. ACTIVEMQ_BASE: E:\activemq\apache-activemq-5.15.6\bin\.. ACTIVEMQ_CONF: E:\activemq\apache-activemq-5.15.6\bin\..\conf ACTIVEMQ_DATA: E:\activemq\apache-activemq-5.15.6\bin\..\data Usage: Main [--extdir <dir>] [task] [task-options] [task data] Tasks: browse - Display selected messages in a specified destination. bstat - Performs a predefined query that displays useful statistics regarding the specified brok r consumer - Receives messages from the broker create - Creates a runnable broker instance in the specified path. decrypt - Decrypts given text dstat - Performs a predefined query that displays useful tabular statistics regarding the specif ed destination type encrypt - Encrypts given text export - Exports a stopped brokers data files to an archive file list - Lists all available brokers in the specified JMX context producer - Sends messages to the broker purge - Delete selected destination's messages that matches the message selector query - Display selected broker component's attributes and statistics. start - Creates and starts a broker using a configuration file, or a broker URI. stop - Stops a running broker specified by the broker name. Task Options (Options specific to each task): --extdir <dir> - Add the jar files in the directory to the classpath. --version - Display the version information. -h,-?,--help - Display this help information. To display task specific help, use Main [task] -h,-?,--help Task Data: - Information needed by each specific task. JMX system property options: -Dactivemq.jmx.url=<jmx service uri> (default is: 'service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi') -Dactivemq.jmx.user=<user name> -Dactivemq.jmx.password=<password> E:\activemq\apache-activemq-5.15.6\bin>activemq.bat start Java Runtime: Oracle Corporation 1.8.0_121 C:\Program Files\Java8\jdk1.8.0_121\jre Heap sizes: current=1005056k free=989327k max=1005056k
启动后访问后台:
2.activemq start xbean:file:../conf/activemq2.xml 使用指定的配置文件进行启动
1.我们把con目录下的activemq2.xml重新命名为activemq2.xml
2.再次直接start启动会报错:
ERROR: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path
resource [activemq.xml]; nested exception is java.io.FileNotFoundException: class path resource [activemq.xml] cannot be
opened because it does not exist
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resourc
e [activemq.xml]; nested exception is java.io.FileNotFoundException: class path resource [activemq.xml] cannot be opened
because it does not exist
3.我们指定启动的xml文件位置再次启动可以启动成功
activemq start xbean:file:../conf/activemq2.xml
3.如果不指定file,也就是xbean:activemq2.xml,那么activemq2.xml必须在classpath目录下
2.用activemq来构建java应用---不依赖于ActiveMQ应用,只需要jar包即可实现
这里主要是用Activemq Broker作为独立的消息服务器来构建Java应用。简单的说,就是在java应用中启动activemq。这种方式会以进程的方式启动一个新的JVM来支持连接。
嵌入式Broker启动
下面的启动方式都不能通过http访问连接,要想测试是否启动成功只能通过收消息和发消息来测试。
1.通过BrokerService方式启动
BrokerService brokerService = new BrokerService(); brokerService.setUseJmx(true); brokerService.addConnector("tcp://localhost:61616"); brokerService.start();
2.通过 BrokerFactory 启动
String uri = "properties:broker.properties"; BrokerService broker = BrokerFactory.createBroker(new URI(uri)); broker.addConnector("tcp://localhost:61616"); broker.start();
broker.properties内容如下:
useJmx=true persistent=false brokerName=QQQ
当然上面的确定方式都有对应的整合Spring之后的启动方式。
3.BrokerService方式整合spring启动
单例模式的BrokerService,加载完成之后调用start方法即可。
<!--Broker启动方式--> <bean id="brokerService" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop"> <property name="brokerName" value="broker1"/> <property name="persistent" value="false"/> <property name="transportConnectorURIs"> <list> <value>tcp://localhost:61616</value> </list> </property> </bean>
从上面也可以看出,一个Broker可以配置多个连接的URI,如下面配置:(端口必须不同)
<!--Broker启动方式--> <bean id="brokerService" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop"> <property name="brokerName" value="broker1"/> <property name="persistent" value="false"/> <property name="transportConnectorURIs"> <list> <value>tcp://localhost:61616</value> <value>tcp://localhost:61618</value> </list> </property> </bean>
4.通过 BrokerFactory 结合spring启动
spring的主配置文件:
<!--Broker启动方式--> <bean id="brokerService" class="org.apache.activemq.xbean.BrokerFactoryBean"> <property name="config" value="activemq.xml"/> <property name="start" value="true"/> </bean>
activemq.xml位于classpath下,内容如下:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> <!-- The <broker> element is used to configure the ActiveMQ broker. --> <broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}"> <destinationPolicy> <policyMap> <policyEntries> <policyEntry topic=">" > <!-- The constantPendingMessageLimitStrategy is used to prevent slow topic consumers to block producers and affect other consumers by limiting the number of messages that are retained For more information, see: http://activemq.apache.org/slow-consumer-handling.html --> <pendingMessageLimitStrategy> <constantPendingMessageLimitStrategy limit="1000"/> </pendingMessageLimitStrategy> </policyEntry> </policyEntries> </policyMap> </destinationPolicy> <!-- The systemUsage controls the maximum amount of space the broker will use before disabling caching and/or slowing down producers. For more information, see: http://activemq.apache.org/producer-flow-control.html --> <systemUsage> <systemUsage> <storeUsage> <storeUsage limit="100 gb"/> </storeUsage> <tempUsage> <tempUsage limit="50 gb"/> </tempUsage> </systemUsage> </systemUsage> <transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://localhost:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors> </broker> </beans>
3.ActiveMQ的Broker方式启动多个broker的方法
1.复制conf文件夹并重新命名为conf2
2.修改conf2文件下的activemq.xml
修改brokerName
修改持久化的数据目录
修改transportConnector的端口,要与第一个默认的不同
<transportConnectors> <!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB --> <transportConnector name="openwire" uri="tcp://0.0.0.0:61617?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/> </transportConnectors>
3.修改conf2\jetty.xml,主要是改端口
<bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> <!-- the default port number for the web console --> <property name="host" value="0.0.0.0"/> <property name="port" value="8162"/> </bean>
4.复制bin目录下面的activemq.bat并命名为activemq2.bat(如果是linux操作系统复制activemq)
5.修改activemq2.bat中的配置文件目录:
6.启动两个broker (如果是linux还需要赋予上面复制后的文件可执行权限 chmod +x activemq2)
activemq2.bat start 和 activemq.bat start
7.http界面查看jetty服务器
【当你用心写完每一篇博客之后,你会发现它比你用代码实现功能更有成就感!】