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">
classpath:activemqconfig.properties
配置监听类的方式的消息消费方配置文件的编写:activemqCustomer.xml
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">
classpath:activemqconfig.properties
在这里配置了两个消息消费的监听类用于监听不同消息队列中传递的消息类型
知识点介绍:
activemq支持的消息类型为5种分别为:
session.createTextMessage(); String数据类型
session.createMapMessage(); Map键值对数据类型
session.createStreamMessage(); StreamIO流数据 可以传递文件
session.createObjectMessage(); 对象数据类型,要求对象类需要实现序列化接口
session.createBytesMessage(); 传递字节数据数据类型
注意在传递流数据类型时 在向消息队列中存储数据时,发送方存储的时候是可以一直存储但是在消费方获取的时候只能取到最后一次存储的数据
所以需要在向streamMessage对象中存储一次数据就发送一次数据
MessageProducerproducer=session.createrProducer("目标队列")
Filefile=newFile("c:\\a.txt");
FileInputStreamin=newFileInputStream(file);
byte[]bytes=newbyte[1024];
inti=-1;
while((i=in.read(bytes))!=-1){
message=session.createStreamMessage();
//这个方法实现在消息队列中存储键值对信息 文件名作为参数在消费方获取
message.setStringProperty("filename",filename);
//将messge中的信息进行清除
message.clearBody();
message.writeBytes(bytes);
producer.send(message);
}
消息流对象可以实现传递任意格式的文件,所以我们在传递大文件时,可以先实现将文件进行压缩然后再进行发送,在消息消费方再进行解压实现文件的快速传递。
3、消息发送方与消息消费方
消息消费方属性注入jmsTemplate对象调用send方法 编写匿名内部类MesageCreator类,重写里面的createMessage方法,获取session会话对象,实现消息的发送。
消息消费方,在配置文件里面配置了实体类的位置之后,在编写实体类时实现MessageListener类重写onMessage方法对接收的方法进行判断。
例子代码:
消息发送方:
importjavax.jms.JMSException;
importjavax.jms.MapMessage;
importjavax.jms.Message;
importjavax.jms.Session;
importorg.springframework.jms.core.JmsTemplate;
importorg.springframework.jms.core.MessageCreator;
publicclassSender{
privateJmsTemplatejmsTemplate;
//getter and setter
publicJmsTemplategetJmsTemplate(){
returnjmsTemplate;
}
publicvoidsetJmsTemplate(JmsTemplatejmsTemplate){