ActiveMQ学习

商城项目用到,所以来学习。解决同步索引库问题,添加商品后,得导入索引库。

使用消息队列。MQ是一个消息中间件。

MQ是一个消息中间件,ActiveMQRabbitMQkafka

1.1. 什么是ActiveMQ

ActiveMQ Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。

主要特点:

1. 多种语言和协议编写客户端。语言: Java, C, C++, C#, Ruby, Perl, Python, PHP。应用协议: OpenWire,Stomp REST,WSNotification,XMPP,AMQP

2. 完全支持JMS1.1J2EE 1.4规范 (持久化,XA消息,事务)

3. Spring的支持,ActiveMQ可以很容易内嵌到使用Spring的系统里面去,而且也支持Spring2.0的特性

4. 通过了常见J2EE服务器( Geronimo,JBoss 4,GlassFish,WebLogic)的测试,其中通过JCA 1.5resource adaptors的配置,可以让ActiveMQ可以自动的部署到任何兼容J2EE 1.4 商业服务器上

5. 支持多种传送协议:in-VM,TCP,SSL,NIO,UDP,JGroups,JXTA

6. 支持通过JDBCjournal提供高速的消息持久化

7. 从设计上保证了高性能的集群,客户端-服务器,点对点

8. 支持Ajax

9. 支持与Axis的整合

10. 可以很容易得调用内嵌JMS provider,进行测试

 

1.2. ActiveMQ的消息形式

对于消息的传递有两种类型:

一种是点对点的,即一个生产者和一个消费者一一对应;

另一种是发布/订阅模式,即一个生产者产生消息并进行发送后,可以由多个消费者进行接收。

JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

  · StreamMessage -- Java原始值的数据流

  · MapMessage--一套名称-值对

  · TextMessage--一个字符串对象

  · ObjectMessage--一个序列化的 Java对象

  · BytesMessage--一个字节的数据流

1.  ActiveMQ的安装

ActiveMQ学习_第1张图片


1.1. 安装环境:

1、需要jdk

2、安装Linux系统。生产环境都是Linux系统。

上传。。。。

[root@localhost apache-activemq-5.12.0]#bin/activemq start

ActiveMQ学习_第2张图片

端口号:8161

ActiveMQ学习_第3张图片

账号:admin 密码admin

ActiveMQ学习_第4张图片

Springactivemq整合:

Jar包:

<dependency>

          <groupId>org.springframeworkgroupId>

          <artifactId>spring-jmsartifactId>

      dependency>

      <dependency>

          <groupId>org.springframeworkgroupId>

          <artifactId>spring-context-supportartifactId>

      dependency>

<dependency>

             <groupId>org.apache.activemqgroupId>

             <artifactId>activemq-allartifactId>

         dependency >

ActiveMQ学习_第5张图片


xml version="1.0"encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsd

   http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd

   http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd

   http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.2.xsd

   http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.2.xsd">

 

 

  

   <bean id="targetConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory">

      <property name="brokerURL"value="tcp://192.168.25.128:61616" />

   bean>

  

   <bean id="connectionFactory"

   class="org.springframework.jms.connection.SingleConnectionFactory">

     

      <property name="targetConnectionFactory"ref="targetConnectionFactory" />

   bean>

  

  

   <bean id="jmsTemplate"class="org.springframework.jms.core.JmsTemplate">

     

      <property name="connectionFactory"ref="connectionFactory" />

   bean>

  

   <bean id="queueDestination"class="org.apache.activemq.command.ActiveMQQueue">

      <constructor-arg>

          <value>spring-queuevalue>

      constructor-arg>

   bean>

  

   <bean id="topicDestination"class="org.apache.activemq.command.ActiveMQTopic">

      <constructor-arg value="topic" />

   bean>

  

beans>


发消息测试:

ActiveMQ学习_第6张图片


package cn.e3mall.activmq;

import java.util.Queue;

import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.TextMessage;

import org.apache.zookeeper.server.SessionTracker.Session;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.messaging.Message;

public class ActivMqSpring {
	@Test
	public void testSpringActiveMq() throws Exception {
		//初始化spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
		//从spring容器中获得JmsTemplate对象
		JmsTemplate jmsTemplate = applicationContext.getBean(JmsTemplate.class);
		//从spring容器中取Destination对象
		Destination destination = (Destination) applicationContext.getBean("queueDestination");
		//使用JmsTemplate对象发送消息。
		jmsTemplate.send(destination, new MessageCreator() {
			
			@Override
			public javax.jms.Message createMessage(javax.jms.Session session) throws JMSException {
				//创建一个消息对象并返回
				TextMessage textMessage = session.createTextMessage("spring activemq queue message");
				return textMessage;
			}
		}); 
			
		
		
	}


}


取消息内容:

ActiveMQ学习_第7张图片

package cn.e3mall.search.message;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.TextMessage;

public class MyMessageListener implements MessageListener {
	@Override
	public void onMessage(Message message) {
		
		try {
			TextMessage textMessage = (TextMessage) message;
			//取消息内容
			String text = textMessage.getText();
			System.out.println(text);
		} catch (JMSException e) {
			e.printStackTrace();
		}
	}

}

配置文件:


ActiveMQ学习_第8张图片

xml version="1.0"encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:context="http://www.springframework.org/schema/context"xmlns:p="http://www.springframework.org/schema/p"

xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-4.2.xsd

   http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-4.2.xsd

   http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-4.2.xsd

   http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-4.2.xsd

   http://www.springframework.org/schema/utilhttp://www.springframework.org/schema/util/spring-util-4.2.xsd">

 

 

  

   <bean id="targetConnectionFactory"class="org.apache.activemq.ActiveMQConnectionFactory">

      <property name="brokerURL"value="tcp://192.168.25.128:61616" />

   bean>

  

   <bean id="connectionFactory"

   class="org.springframework.jms.connection.SingleConnectionFactory">

     

      <property name="targetConnectionFactory"ref="targetConnectionFactory" />

   bean>

  

  

   <bean id="queueDestination"class="org.apache.activemq.command.ActiveMQQueue">

      <constructor-arg>

          <value>spring-queuevalue>

      constructor-arg>

   bean>

  

   <bean id="topicDestination"class="org.apache.activemq.command.ActiveMQTopic">

      <constructor-arg value="topic" />

   bean>

  

  

   <bean id="myMessageListener"class="cn.e3mall.search.message.MyMessageListener">bean>

  

   <bean class="org.springframework.jms.listener.DefaultMessageListenerContainer">

      <property name="connectionFactory"ref="connectionFactory" />

      <property name="destination"ref="queueDestination" />

      <property name="messageListener"ref="myMessageListener" />

   bean>

  

beans>

消息消费者:

ActiveMQ学习_第9张图片


package cn.e3mall.activemq;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MessageConsumer {

	@Test
	public void testQueueConsumer() throws Exception {
		//初始化spring容器
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring/applicationContext-activemq.xml");
		//等待
		System.in.read();
	}

}

ActiveMQ学习_第10张图片







你可能感兴趣的:(linux,宜立方商城,消息activemq)