Broker:至關於一個ActiveMQ服務器實例java
命令行啓動參數示例以下:
1:activemq start :使用默認的activemq.xml來啓動
2:activemq start xbean:file:../conf/activemq-2.xml :使用指定的配置文件來啓動
3:若是不指定file,也就是xbean:activemq-2.xml,那麼xml必須在classpath下面spring
用ActiveMQ來構建Java應用:
將用ActiveMQ Broker做爲獨立的消息服務器來構建JAVA應用。
ActiveMQ也支持在vm中通訊基於嵌入式的broker,可以無縫的集成其它java應用apache
此方式在本地啓動一個broker,而後發消息和接消息都是在本地服務器
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.gordon"/> <!--配置BrokerService 只需啓動spring容器便可建立出一個單例的broker ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); --> <!--<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> </bean>--> <!--配置生產者 JmsTemplate是Spring提供的JMS工具類,它能夠進行消息發送、接收等--> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!--鏈接工廠--> <property name="connectionFactory" ref="jmsFactory"/> <!--消息類型--> <property name="defaultDestination" ref="queue"/> <!--消息轉換器MessageConverter 詳解:http://elim.iteye.com/blog/1900937--> <property name="messageConverter"> <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/> </property> </bean> <!--activeMq鏈接池--> <bean id="jmsFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" destroy-method="stop"> <!--鏈接工廠 真正能夠產生Connection的ConnectionFactory--> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL"> <value>tcp://192.168.157.4:61616</value> </property> </bean> </property> <!--最大鏈接數--> <property name="maxConnections" value="100"/> </bean> <!--topic消息類型--> <bean id="topic" class="org.apache.activemq.command.ActiveMQTopic"> <!--constructor-arg:經過構造函數注入 index="0"表示第一個參數--> <constructor-arg index="0" value="spring-topic"/> </bean> <!--ptp消息類型--> <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="spring-queue"/> </bean> <!-- 配置消費者 --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <!--表示監聽的是哪一個ConnectionFactory--> <property name="connectionFactory" ref="jmsFactory"/> <!--監聽什麼的Destination--> <property name="destination" ref="queue"/> <!--接收到消息之後進行消息處理的MessageListener--> <property name="messageListener" ref="messageListener"/> </bean> <bean id="messageListener" class="com.gordon.basis.CustomMessageListener"/> </beans>
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <context:component-scan base-package="com.gordon"/> <!--配置BrokerService 只需啓動spring容器便可建立出一個單例的broker ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); --> <!--<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> </bean>--> <!--配置生產者 JmsTemplate是Spring提供的JMS工具類,它能夠進行消息發送、接收等--> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <!--鏈接工廠--> <property name="connectionFactory" ref="jmsFactory"/> <!--消息類型--> <property name="defaultDestination" ref="queue"/> <!--消息轉換器MessageConverter 詳解:http://elim.iteye.com/blog/1900937--> <property name="messageConverter"> <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/> </property> </bean> <!--activeMq鏈接池--> <bean id="jmsFactory" class="org.apache.activemq.jms.pool.PooledConnectionFactory" destroy-method="stop"> <!--鏈接工廠 真正能夠產生Connection的ConnectionFactory--> <property name="connectionFactory"> <bean class="org.apache.activemq.ActiveMQConnectionFactory"> <property name="brokerURL"> <value>tcp://192.168.157.4:61616</value> </property> </bean> </property> <!--最大鏈接數--> <property name="maxConnections" value="100"/> </bean> <!--topic消息類型--> <bean id="topic" class="org.apache.activemq.command.ActiveMQTopic"> <!--constructor-arg:經過構造函數注入 index="0"表示第一個參數--> <constructor-arg index="0" value="spring-topic"/> </bean> <!--ptp消息類型--> <bean id="queue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg index="0" value="spring-queue"/> </bean> <!-- 配置消費者 --> <bean id="jmsContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <!--表示監聽的是哪一個ConnectionFactory--> <property name="connectionFactory" ref="jmsFactory"/> <!--監聽什麼的Destination--> <property name="destination" ref="topic"/> <!--接收到消息之後進行消息處理的MessageListener--> <property name="messageListener" ref="messageListener"/> </bean> <bean id="messageListener" class="com.gordon.basis.CustomMessageListener"/> </beans>
package com.gordon.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; import org.springframework.jms.core.MessageCreator; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.Session; import javax.jms.TextMessage; /** * Created by gordon on 2018/9/22. */ public class QueueSender { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate"); jmsTemplate.send(new MessageCreator() { @Override public Message createMessage(Session session) throws JMSException { TextMessage textMessage = session.createTextMessage("activeMQ spring test 發送消息 "); return textMessage; } }); } }
package com.gordon.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.jms.core.JmsTemplate; /** 因爲applicationContext.xml中配置了消息接收,能夠不用這種方式 * Created by gordon on 2018/9/22. */ public class QueueReceiver { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); JmsTemplate jmsTemplate = (JmsTemplate) context.getBean("jmsTemplate"); String msg = (String) jmsTemplate.receiveAndConvert(); System.out.println("activemq spring test 接收消息 : " + msg); } }
package com.gordon.basis; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; /** * 消息監聽器,它會另起一個線程監聽消息服務器 * Created by gordon on 2018/9/8. */ public class CustomMessageListener implements MessageListener { @Override public void onMessage(Message message) { TextMessage textMessage = (TextMessage) message; try { String text = textMessage.getText(); System.out.println(" ===== 消費者 接收消息 === " + text); } catch (JMSException e) { e.printStackTrace(); } } }