當前配置是允許接收所有的對象序列化,更多設置詳情參考官網:
http://activemq.apache.org/objectmessage.html
1、保證當前MQ能正常接收發送消息
2、定義一個實體類Member繼承Serializable
package com.activemq.test;
import java.io.Serializable;
import java.util.Date;
@SuppressWarnings("serial")
public class Member implements Serializable{
private String name;
private double score;
private int age;
private Date brithday;
public Member(){}
public Member(String name, double score, int age, Date brithday) {
super();
this.name = name;
this.score = score;
this.age = age;
this.brithday = brithday;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getScore() {
return score;
}
public void setScore(double score) {
this.score = score;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Date getBrithday() {
return brithday;
}
public void setBrithday(Date brithday) {
this.brithday = brithday;
}
@Override
public String toString() {
return "Member [name=" + name + ", score=" + score + ", age=" + age + ", brithday=" + brithday + "]";
}
}
4、發送端測試代碼
package com.activemq.test;
import java.util.Date;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.MessageProducer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TestSendMq {
private static final int SEND_NUMBER = 5;
/**
* @param args
*/
public static void main(String[] args) {
// ConnectionFactory:連接工廠,JMS用它創建連接
ConnectionFactory connectionFactory;
// Connection:JMS客戶端到JMS Provider的連接
Connection connection = null;
// Session:一個發送或接收消息的線程
Session session;
// Destination:消息的目的地;消息發送給誰.
Destination destination;
// MessageProducer:消息發送者
MessageProducer producer;
// TextMessage message;
//構造ConnectionFactory實例對象,此處採用ActiveMq的實現jar
connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"failover:(tcp://0.0.0.0:61618)");
try {
//構造從工廠得到連接對象
connection =connectionFactory.createConnection();
//啓動
connection.start();
//獲取操作連接
session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
//獲取session
destination = session.createQueue("FirstQueue");
//得到消息生成者【發送者】
producer =session.createProducer(destination);
//設置不持久化,此處學習,實際根據項目決定
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
//構造消息,此處寫死,項目就是參數,或者方法獲取
sendMessage(session, producer);
session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
public static void sendMessage(Session session,MessageProducer producer)
throws Exception {
for (int i = 1; i <=SEND_NUMBER; i++) {
Member a = new Member("測試賬號"+i,11.1,15+i,new Date());
// HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
// map.put(i, i);
ObjectMessage message = session
.createObjectMessage(a);
//發送消息到目的地方
System.out.println("發送消息:" + "ActiveMq 發送的消息" + i);
producer.send(message);
}
}
}
3、接收端測試代碼
package com.activemq.test;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class TestNewCounsumerMq {
public static void main(String[] args) {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://0.0.0.0:61618");
// factory.setTrustedPackages(new ArrayList<String>(Arrays.asList("com.activemq.test")));
factory.setTrustAllPackages(true); //允許接收所有的數據~~~
org.apache.camel.component.jms.JmsConfiguration conf = new org.apache.camel.component.jms.JmsConfiguration();
conf.setConnectionFactory(factory);
org.apache.activemq.camel.component.ActiveMQComponent comp= new org.apache.activemq.camel.component.ActiveMQComponent();
comp.setConfiguration(conf);
Connection connection = null ;
try {
connection = factory.createConnection();
//啓動
connection.start();
//獲取操作連接
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
//獲取session
Destination destination = session.createQueue("FirstQueue");
MessageConsumer consumer =session.createConsumer(destination);
System.out.println(consumer);
while (true) {
//設置接收者接收消息的時間,爲了便於測試,這裏誰定爲100s
ObjectMessage message =(ObjectMessage) consumer.receive(100000);
if (null != message) {
Member a = (Member)message.getObject();
System.out.println("收到消息" +a.getName());
} else {
break;
}
}
} catch (JMSException e) {
e.printStackTrace();
}finally{
try {
if (null != connection)
connection.close();
} catch (Throwable ignore) {
}
}
}
}
備註:以上純屬測試,更多安全詳情配置請參考官網
http://activemq.apache.org/objectmessage.html