ActiveMQ中常用API介绍
API | 说明 |
---|---|
ConnectionFactory | 链接工厂, 用于创建链接的工厂类型 |
Connection | 链接. 用于建立访问ActiveMQ连接的类型, 由链接工厂创建 |
Session | 会话, 一次持久有效有状态的访问. 由链接创建 |
Destination & Queue | 目的地, 用于描述本次访问ActiveMQ的消息访问目的地. 即ActiveMQ服务中的具体队列. 由会话创建.interface Queue extends Destination |
MessageProducer | 消息生成者, 在一次有效会话中, 用于发送消息给ActiveMQ服务的工具. 由会话创建. |
MessageConsumer | 消息消费者【消息订阅者,消息处理者】, 在一次有效会话中, 用于从ActiveMQ服务中获取消息的工具. 由会话创建. |
Message | 消息, 通过消息生成者向ActiveMQ服务发送消息时使用的数据载体对象或消息消费者从ActiveMQ服务中获取消息时使用的数据载体对象. 是所有消息【文本消息,对象消息等】具体类型的顶级接口. 可以通过会话创建或通过会话从ActiveMQ服务中获取 |
创建项目:
分别创建生产者项目和消费者项目:
生产者项目:
maven依赖:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sxt</groupId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- ActiveMQ客户端完整jar包依赖 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.12.0</version>
</dependency>
<!-- ActiveMQ和Spring整合配置文件标签处理jar包依赖 -->
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>4.5</version>
</dependency>
<!-- Spring-JMS插件相关jar包依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- Spring框架上下文jar包依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencies>
<artifactId>activemq-02-producer</artifactId>
</project>
applicationcontext.xml: 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.9.0.xsd">
<!-- 添加扫描 -->
<!-- <context:component-scan base-package="com.sxt.*"></context:component-scan> -->
<!-- ActiveMQ 连接工厂 -->
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
<!-- 需提供访问路径tcp://ip:61616;以及用户名,密码 -->
<amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://192.168.177.128:61616" userName="admin" password="admin" />
<!-- Spring Caching连接工厂 -->
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<!-- Session缓存数量 -->
<property name="sessionCacheSize" value="100" />
</bean>
<!-- 消息生产者 start -->
<!-- 定义JmsTemplate对象. 此类型由Spring框架JMS组件提供. 用于访问ActiveMQ使用. -->
<bean id="jmsQueueTemplate" class="org.springframework.jms.core.JmsTemplate">
<!-- 这个connectionFactory对应的是我们定义的Spring提供的那个ConnectionFactory对象 -->
<constructor-arg ref="connectionFactory" />
<!-- 非pub/sub模型(发布/订阅),即队列模式, 默认数据可省略配置 -->
<!-- <property name="pubSubDomain" value="false" /> -->
</bean>
<!-- 定义生成者对象 -->
<bean id="orderProducer" class="com.sxt.service.orderProducer">
<!-- 为属性赋值 -->
<property name="template" ref="jmsQueueTemplate"></property>
</bean>
<!--消息生产者 end -->
<!-- 消息消费者 start -->
<!-- 定义消息监听器, 此组件为spring-jms组件定义. 可以一次注册若干消息监听器.
属性解释:
destination-type - 目的地类型, queue代表消息队列
可选值: queue | topic | durableTopic
queue - 默认值. 代表消息队列
topic - 代表消息队列集合
durableTopic - 持久化的消息队列集合. ActiveMQ会保证消息的消费者一定接收到此消息.
container-type - 容器类型
可选值: default | simple
default - 默认值. 默认容器类型, 对应DefaultMessageListenerContainer
simple - 简单容器类型, 对应SimpleMessageListenerContainer
connection-factory - 链接工厂, 注入的是Spring-JMS组件提供的链接工厂对象.
acknowledge - 确认方式
可选值: auto | client | dups-ok | transacted
auto - 默认值, 即自动确认消息
client - 客户端确认消息
dups-ok - 可使用副本的客户端确认消息
transacted - 有事务的持久化消息确认机制. 需开启对ActiveMQ的事务控制才可应用.
-->
</beans>
Order类:
package com.sxt.pojo;
import java.io.Serializable;
public class Order implements Serializable{
private static final long serialVersionUID =1L;
private String oderId;
private String mcName;
public String getOderId() {
return oderId;
}
public void setOderId(String oderId) {
this.oderId = oderId;
}
public String getMcName() {
return mcName;
}
public void setMcName(String mcName) {
this.mcName = mcName;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Order [oderId=" + oderId + ", mcName=" + mcName + "]";
}
}
orderProducer类:
package com.sxt.service;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.springframework.context.annotation.Description;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import com.sxt.pojo.Order;
public class orderProducer {
private JmsTemplate template;
public JmsTemplate getTemplate() {
return template;
}
public void setTemplate(JmsTemplate template) {
this.template = template;
}
public void sendOrder(String string,Order order){
template.send(string,new MessageCreator() {
@Override
public Message createMessage(Session session) throws JMSException {
return session.createObjectMessage(order);
}
});
}
}
测试test类:
package com.sxt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.sxt.pojo.Order;
import com.sxt.service.orderProducer;
public class test {
public static void main(String[] args) {
ApplicationContext con=new ClassPathXmlApplicationContext("applicationcontext.xml");
orderProducer bean=con.getBean(orderProducer.class);
Order order=new Order();
order.setOderId("1001");
order.setMcName("yyy");
bean.sendOrder("Spring-MQ", order);
System.out.println("消息发送");
}
}
测试:test
消息发送成功;
ActiveMQ这里也是显示有两条为处理的消息;
创建消费者类:
maven依赖(pom.xml):
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.sxt</groupId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<!-- ActiveMQ客户端完整jar包依赖 -->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.12.0</version>
</dependency>
<!-- ActiveMQ和Spring整合配置文件标签处理jar包依赖 -->
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>4.5</version>
</dependency>
<!-- Spring-JMS插件相关jar包依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!-- Spring框架上下文jar包依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencies>
<artifactId>activemq-03-conxumer</artifactId>
</project>
applicationcontext.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:amq="http://activemq.apache.org/schema/core"
xmlns:jms="http://www.springframework.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/jms
http://www.springframework.org/schema/jms/spring-jms-4.0.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.9.0.xsd">
<!-- 添加扫描 -->
<!-- <context:component-scan base-package="com.sxt.*"></context:component-scan> -->
<!-- ActiveMQ 连接工厂 -->
<!-- 真正可以产生Connection的ConnectionFactory,由对应的 JMS服务厂商提供 -->
<!-- 需提供访问路径tcp://ip:61616;以及用户名,密码 -->
<amq:connectionFactory id="amqConnectionFactory"
brokerURL="tcp://192.168.177.128:61616" userName="admin" password="admin" />
<!-- Spring Caching连接工厂 -->
<!-- Spring用于管理真正的ConnectionFactory的ConnectionFactory -->
<bean id="connectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory">
<!-- 目标ConnectionFactory对应真实的可以产生JMS Connection的ConnectionFactory -->
<property name="targetConnectionFactory" ref="amqConnectionFactory"></property>
<!-- Session缓存数量 -->
<property name="sessionCacheSize" value="100" />
</bean>
<!--消息生产者 end -->
<!-- 消息消费者 start -->
<!-- 定义消息监听器, 此组件为spring-jms组件定义. 可以一次注册若干消息监听器.
属性解释:
destination-type - 目的地类型, queue代表消息队列
可选值: queue | topic | durableTopic
queue - 默认值. 代表消息队列
topic - 代表消息队列集合
durableTopic - 持久化的消息队列集合. ActiveMQ会保证消息的消费者一定接收到此消息.
container-type - 容器类型
可选值: default | simple
default - 默认值. 默认容器类型, 对应DefaultMessageListenerContainer
simple - 简单容器类型, 对应SimpleMessageListenerContainer
connection-factory - 链接工厂, 注入的是Spring-JMS组件提供的链接工厂对象.
acknowledge - 确认方式
可选值: auto | client | dups-ok | transacted
auto - 默认值, 即自动确认消息
client - 客户端确认消息
dups-ok - 可使用副本的客户端确认消息
transacted - 有事务的持久化消息确认机制. 需开启对ActiveMQ的事务控制才可应用.
-->
<jms:listener-container destination-type="queue"
container-type="default" connection-factory="connectionFactory"
acknowledge="auto">
<!-- 注册消息监听器. 如果需要注册多个, 重复定义下述标签. -->
<jms:listener destination="Spring-MQ" ref="orderReciver" />
</jms:listener-container>
<!-- 容器管理消息监听器实现类对象 -->
<bean id="orderReciver" class="com.sxt.consumer.OrderConsumer"/>
<!-- 消息消费者 end -->
</beans>
OrderConsumer :
package com.sxt.consumer;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import org.apache.activemq.command.ActiveMQBlobMessage;
import org.apache.activemq.command.ActiveMQObjectMessage;
public class OrderConsumer implements MessageListener{
@Override
public void onMessage(Message message) {
ActiveMQObjectMessage msg=(ActiveMQObjectMessage) message;
try {
System.out.println(msg.getObject());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Order
package com.sxt.pojo;
import java.io.Serializable;
public class Order implements Serializable{
private static final long serialVersionUID =1L;
private String oderId;
private String mcName;
public String getOderId() {
return oderId;
}
public void setOderId(String oderId) {
this.oderId = oderId;
}
public String getMcName() {
return mcName;
}
public void setMcName(String mcName) {
this.mcName = mcName;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
@Override
public String toString() {
return "Order [oderId=" + oderId + ", mcName=" + mcName + "]";
}
}
test
package com.sxt.test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
public static void main(String[] args) {
ApplicationContext con=new ClassPathXmlApplicationContext("applicationcontext.xml");
}
}
测试test:
这里消息就过来了;
刚刚两个待处理的消息就被处理了;
整合完成;