使用ActiveMQ创建Java应用程序
1. 将ActiceMQ嵌入至Java应用程序中
(1) 嵌入ActiveMQ使用BrokerService
Configure ActiveMQ with security plug-ins using XML:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="myBroker" dataDirectory="${activemq.base}/data">
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616" />
</transportConnectors>
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="password"
groups="admins,publishers,consumers" />
<authenticationUser username="publisher"
password="password" groups="publishers,consumers" />
<authenticationUser username="consumer" password="password"
groups="consumers" />
<authenticationUser username="guest" password="password"
groups="guests" />
</users>
</simpleAuthenticationPlugin>
</plugins>
</broker>Configure ActiveMQ with security plug-ins using Java:
public static void main(String[] args) throws Exception {
//实例化并且配置BrokerService
BrokerService broker = new BrokerService();
broker.setBrokerName("myBroker");
broker.setDataDirectory("data/");
SimpleAuthenticationPlugin authentication = new SimpleAuthenticationPlugin();
List<AuthenticationUser> users = new ArrayList<AuthenticationUser>();
users.add(new AuthenticationUser("admin", "password", "admins,publishers,consumers"));
users.add(new AuthenticationUser("publisher", "password", "publishers,consumers"));
users.add(new AuthenticationUser("consumer", "password", "consumers"));
users.add(new AuthenticationUser("guest", "password", "guests"));
authentication.setUsers(users);
broker.setPlugins(new BrokerPlugin[]{authentication});
//添加传输连接器
broker.addConnector("tcp://localhost:61616");
//启动broker
broker.start();
System.out.println();
System.out.println("Press any key to stop the broker");
System.out.println();
System.in.read();
}说明:在使用BrokerService进行Broker配置时,需要先将plug-ins添加至broker,后添加connector;否则
plug-ins是不能被初始化的;Broker启动以后所添加的Connector也是不会被启动的。
(2) 嵌入ActiveMQ使用BrokerFactory
使用最多的Factory 是XBeanBrokerFactory,XBeanBrokerFactory使用的URI模板为:
xbean:/path/to/activemq.xml
public static void main(String[] args) throws Exception {
System.setProperty("activemq.base", System.getProperty("user.dir"));
BrokerService broker = BrokerFactory.createBroker(
new URI("xbean: target/classes/org/apache/activemq/book/ch7/activemq-simple.xml"));
broker.start();
System.out.println();
System.out.println("Press any key to stop the broker");
System.out.println();
System.in.read();
}说明:配置中的xbean URI命名空间是用来告诉BrokerFactory去ClassPath 或文件系统中查找给定的配置文
件,activemq-simple.xml:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
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-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd
http://activemq.apache.org/camel/schema/spring http://activemq.apache.org/camel/schema/spring/camel-spring.xsd">
<!-- Allows us to use system properties as variables in this configuration file -->
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" />
<broker xmlns="http://activemq.apache.org/schema/core"
brokerName="localhost" dataDirectory="${activemq.base}/data">
<plugins>
<simpleAuthenticationPlugin>
<users>
<authenticationUser username="admin" password="password"
groups="admins,publishers,consumers" />
<authenticationUser username="publisher"
password="password" groups="publishers,consumers" />
<authenticationUser username="consumer"
password="password" groups="consumers" />
<authenticationUser username="guest" password="password"
groups="guests" />
</users>
</simpleAuthenticationPlugin>
</plugins>
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnector name="openwire" uri="tcp://localhost:61616" />
</transportConnectors>
</broker>
</beans>2. 将ActiveMQ嵌入至Spring应用中
(1) 使用纯粹的SpringXML配置
<beans> <bean id="admins" class="org.apache.activemq.security.AuthenticationUser"> <constructor-arg index="0" value="admin" /> <constructor-arg index="1" value="password" /> <constructor-arg index="2" value="admins,publisher,consumers" /> </bean> <bean id="publishers" class="org.apache.activemq.security.AuthenticationUser"> <constructor-arg index="0" value="publisher" /> <constructor-arg index="1" value="password" /> <constructor-arg index="2" value="publisher,consumers" /> </bean> <bean id="consumers" class="org.apache.activemq.security.AuthenticationUser"> <constructor-arg index="0" value="consumer" /> <constructor-arg index="1" value="password" /> <constructor-arg index="2" value="consumers" /> </bean> <bean id="guests" class="org.apache.activemq.security.AuthenticationUser"> <constructor-arg index="0" value="guest" /> <constructor-arg index="1" value="password" /> <constructor-arg index="2" value="guests" /> </bean> <bean id="simpleAuthPlugin" class="org.apache.activemq.security.SimpleAuthenticationPlugin"> <property name="users"> <util:list> <ref bean="admins" /> <ref bean="publishers" /> <ref bean="consumers" /> <ref bean="guests" /> </util:list> </property> </bean> <bean id="broker" class="org.apache.activemq.broker.BrokerService" init-method="start" destroy-method="stop"> <property name="brokerName" value="myBroker" /> <property name="persistent" value="false" /> <property name="transportConnectorURIs"> <list> <value>tcp://localhost:61616</value> </list> </property> <property name="plugins"> <list> <ref bean="simpleAuthPlugin" /> </list> </property> </bean> </beans>
(2) 使用BrokerFactoryBean配置:
<beans> <bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean"> <property name="config" value="file:src/main/resources/org/apache/activemq/book/ch6/activemq-simple.xml" /> <property name="start" value="true" /> </bean> </beans>
(3) Using Apache XBean with Spring:
public static void main(String[] args) throws Exception {
if (args.length == 0) {
System.err.println("Please define a configuration file!");
return;
}
String config = args[0];
System.out.println("Starting broker with the following configuration: " + config);
System.setProperty("activemq.base", System.getProperty("user.dir"));
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(config);
Publisher publisher = new Publisher();
for (int i = 0; i < 100; i++) {
publisher.sendMessage(new String[]{"JAVA", "IONA"});
}
}(4) 使用自定义的XML命名空间(amq)with Spring
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:amq="http://activemq.apache.org/schema/core"
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-2.0.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<amq:broker brokerName="localhost" dataDirectory="${activemq.base}/data">
<!-- The transport connectors ActiveMQ will listen to -->
<amq:transportConnectors>
<amq:transportConnector name="openwire"
uri="tcp://localhost:61616" />
</amq:transportConnectors>
<amq:plugins>
<amq:simpleAuthenticationPlugin>
<amq:users>
<amq:authenticationUser username="admin"
password="password" groups="admins,publishers,consumers" />
<amq:authenticationUser username="publisher"
password="password" groups="publishers,consumers" />
<amq:authenticationUser username="consumer"
password="password" groups="consumers" />
<amq:authenticationUser username="guest"
password="password" groups="guests" />
</amq:users>
</amq:simpleAuthenticationPlugin>
</amq:plugins>
</amq:broker>
</beans>