producerAPI代码段:采用多方式发送信息
package com.project.producerAPI;
import java.io.Serializable;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.DeliveryMode;
import javax.jms.Destination;
import javax.jms.Message;
import javax.jms.MessageProducer;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class ProducerSend {
private ConnectionFactory factory = null;
private Connection connection = null;
private Session session = null;
private Destination destination = null;
private MessageProducer producer = null;
private Message message = null;
/**
* 直接发消息到默认目的地,默认目的地是test-send
* @param obj
*/
public void sendMessage(Serializable obj){
try{
this.init("test-send");
message = session.createObjectMessage(obj);
producer.send(message);
System.out.println("sendMessage method run");
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 指定目的地发送消息
* @param obj
* @param destinationName
* @throws Exception
*/
public void sendMessage(Serializable obj, String destinationName) throws Exception{
try{
this.init();
message = session.createObjectMessage(obj);
//创建临时目的地
Destination destination = session.createQueue(destinationName);
producer.send(destination, message);
System.out.println("sendMessage destination method run");
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 多参数发送消息
*
* @param obj
* @param deliveryMode -持久化模式
* DeliveryMode.PERSISTENT - 持久化,消息会持久化到数据库(kahadb,JDBC等)
* DeliveryMode.NON_PERSISTENT - 非持久化,消息只保存到内存
* @param priority - 优先级,取值范围【0~9】,取值越大优先级越高。不能保证绝对顺序
* 必须在activemq.xml配置文件的borker标签中增加配置
* @param timeToLive - 消息有效期,单位毫秒,有效期超时,消息自动放弃
*/
public void sendMessageWithParameters(Serializable obj, int deliveryMode, int priority, long timeToLive){
try{
this.init("test-send-params");
message = session.createObjectMessage(obj);
producer.send(destination, message, deliveryMode, priority, timeToLive);
}catch(Exception e){
e.printStackTrace();
}
}
//无参初始化
private void init() throws Exception{
this.init(null);
}
//指定目的地初始化
private void init(String destinationName) throws Exception{
this.init("admin", "admin", "tcp://192.168.0.109:61616", destinationName);;
}
//多参初始化
private void init(String userName, String password, String brokerURL, String destinationName) throws Exception{
try{
factory = new ActiveMQConnectionFactory(userName, password, brokerURL);
connection = factory.createConnection();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
if(null != destinationName){
destination = session.createQueue(destinationName);
producer = session.createProducer(destination);
}else{
producer = session.createProducer(null);
}
connection.start();
}catch(Exception e){
e.printStackTrace();
throw e;
}
}
public void destory(){
this.release();
}
private void release(){
try{
if(producer != null) producer.close();
if(session != null) session.close();
if(connection != null) connection.close();
}catch(Exception e){}
}
public static void main(String[] args) {
ProducerSend producer = null;
try{
producer= new ProducerSend();
producer.sendMessage("send message");
//producer.sendMessage("send message for destination", "test-send-des");
//producer.sendMessageWithParameters("send message for parameters", DeliveryMode.PERSISTENT, 0, 1000*10);
/*producer.sendMessageWithParameters("2", DeliveryMode.PERSISTENT, 2, 0);
producer.sendMessageWithParameters("9", DeliveryMode.PERSISTENT, 9, 0);
producer.sendMessageWithParameters("7", DeliveryMode.PERSISTENT, 7, 0);
producer.sendMessageWithParameters("5", DeliveryMode.PERSISTENT, 5, 0);*/
producer.destory();
}catch(Exception e){
e.printStackTrace();
}
}
}
consuer代码段
package com.project.producerAPI;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
public class ConsumerSend {
/**
* 处理消息
*/
public void consumerMessage(){
ConnectionFactory factory = null;
Connection connection = null;
Session session = null;
Destination destination = null;
MessageConsumer consumer = null;
Message message = null;
try{
factory = new ActiveMQConnectionFactory("admin", "admin",
"tcp://192.168.0.109:61616");
connection = factory.createConnection();
connection.start();
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
destination = session.createQueue("test-send");
consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
/**
* 监听器一旦注册,永久不失效
* 永久-consumer线程不关闭
* 处理消息的方式:只要有消息未处理,自动调用onMessage方法,处理消息
* 监听器可以注册若干。注册多个监听器,相当于集群
* ActiveMQ自动轮询多个监听器,处理队列中的消息,实现并行处理。
*
* 处理消息的方法,就是监听的方法
* 监听的事件是:消息,消息未处理
* 要处理的具体内容:消息处理
* @param message - 未处理的消息
*/
@Override
public void onMessage(Message message) {
try {
ObjectMessage om = (ObjectMessage) message;
Object data = om.getObject();
System.out.println(data);
} catch (JMSException e) {
e.printStackTrace();
}
}
});
System.in.read();
}catch(Exception e){
e.printStackTrace();
}finally{
try{
if(consumer != null) consumer.close();
if(session != null) session.close();
if(connection != null)connection.close();
}catch(Exception e){}
}
}
public static void main(String[] args) {
ConsumerSend consumer = new ConsumerSend();
consumer.consumerMessage();
}
}