使用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>

相关推荐