1、下载
ActiveMQ的最新版本是5.10.0,但由于我们内网下载存在问题,所以目前通过内网只能下载到5.9.0,下载地址:http://activemq.apache.org/activemq-590-release.html
2、安装
如果是在windows系统中运行,可以直接解压apache-activemq-5.9.0-bin.zip,并运行bin目录下的activemq.bat文件,此时使用的是默认的服务端口:61616和默认的console端口:8161。
如果是在linux或unix下运行,在bin目录下执行命令:./activemq setup
3、修改ActiveMQ的服务端口和console端口
A、修改服务端口:打开conf/activemq.xml文件,修改以下红色字体部分
<transportConnectors>
<transportConnector name="openwire" uri="tcp://10.42.220.72:61618"discoveryUri="multicast://default"/>
</transportConnectors>
B、修改console的地址和端口:打开conf/jetty.xml文件,修改以下红色字体部分
<bean id="jettyPort"class="org.apache.activemq.web.WebConsolePort"init-method="start">
<property name="port" value="8162"/>
</bean>
activemq 5.9.0+spring4.1.6
<span style="white-space:pre"> </span><!-- activemq 消息服务器 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.6.RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
<scope>compile</scope>
</dependency>
配置文件:
activemq.properties
jms.broker.url=tcp://localhost:61616
jms.queue.name=msgqueue
JMSConfigure.xml
<?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:amq="http://activemq.apache.org/schema/core"
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-5.8.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="order" value="1" />
<property name="ignoreUnresolvablePlaceholders" value="true" />
<property name="location">
<value>classpath:activemqconfig.properties</value>
</property>
</bean>
<!-- Activemq connection factory -->
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<constructor-arg index="0" value="${jms.broker.url}"/>
<property name="useAsyncSend" value="true"/>
</bean>
<!-- ConnectionFactory Definition -->
<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
<constructor-arg ref="amqConnectionFactory"/>
</bean>
<!-- Default Destination Queue Definition-->
<bean id="defaultDestination" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="${jms.queue.name}"/>
</bean>
<!-- JmsTemplate Definition -->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="defaultDestination" ref="defaultDestination"/>
</bean>
<!-- 自定义发送消息对象 -->
<!-- Message Sender Definition -->
<bean id="messageSender" class="com.lvyuanj.core.activemq.handle.MessageSender">
<constructor-arg index="0" ref="jmsTemplate"/>
</bean>
<!-- 自定义接受消息对象 -->
<!-- Message Receiver Definition -->
<bean id="messageReceiver" class="com.lvyuanj.core.activemq.handle.MessageReceiver">
</bean>
<bean class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory"/>
<property name="destinationName" value="${jms.queue.name}"/>
<property name="messageListener" ref="messageReceiver"/>
</bean>
</beans>
发送消息类:
package com.lvyuanj.core.activemq.handle;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.stereotype.Component;
@Component
public class MessageSender {
private final JmsTemplate jmsTemplate;
public MessageSender(final JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void send(final String text) {
jmsTemplate.convertAndSend(text);
System.out.println("send: " + text);
}
}
接受消息类:
package com.lvyuanj.core.activemq.handle;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.jms.*;
public class MessageReceiver implements MessageListener {
private SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
public void onMessage(Message message) {
if(message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
String text = textMessage.getText();
System.out.println(String.format("Received: %s",text+",time:"+sf.format(new Date())));
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
发送测试类:
package com.lvyuanj.core.app;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;
import com.lvyuanj.core.activemq.handle.MessageSender;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class SenderApp
{
public static void main( String[] args ) throws IOException {
start("JMS-Configuration.xml");
}
public static void start(String configLocation) throws IOException {
MessageSender sender = getMessageSender(configLocation);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input your message:");
String text = br.readLine();
while (!StringUtils.isEmpty(text)) {
System.out.println(String.format("send message: %s", text));
sender.send(text);
text = br.readLine();
}
}
public static MessageSender getMessageSender(String configLocation) {
ApplicationContext context = new ClassPathXmlApplicationContext(configLocation);
return (MessageSender) context.getBean("messageSender");
}
}
接收测试类:
package com.lvyuanj.core.app;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ReceiverApp {
public static void main( String[] args )
{
new ClassPathXmlApplicationContext("JMS-Configuration.xml");
}
}