1、消息发送程序
public class UMProducer {
private MessageProducer producer = null;
private Connection connection = null;
private Session session = null;
public void start(){
try{
//自动重连
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
ActiveMQConnection.DEFAULT_USER,
ActiveMQConnection.DEFAULT_PASSWORD,
"failover://(tcp://127.0.0.1:61616?tcpNoDelay=true)");
connection = connectionFactory.createConnection();
((ActiveMQConnection)connection).setUseAsyncSend(true); //异步发送消息
connection.start();
session = connection.createSession(Boolean.TRUE, Session.CLIENT_ACKNOWLEDGE); //使用事务时,将忽略ACK
Destination destination = session.createQueue("queue_msg");
producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.PERSISTENT); //消息持久化
producer.setTimeToLive(1000 * 60 * 60 * 24); //消息过期时间,单位为 毫秒
int i = 0;
while(true){
++i;
MessageEntity entity = new MessageEntity();
entity.setMessage("activeMQ mseeage " + i);
ObjectMessage message = session.createObjectMessage(entity);
producer.send(message);
//在事务性会话中,只有commit之后,消息才会真正到达目的地
//commit动作比较耗时,采取批量commit的策略以提高性能
if(i % 1000 == 0){
session.commit();
}
System.out.println("waiting... " + i);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public void stop(){
try{
if(session != null) {
session.close();
}
if(connection != null) {
connection.close();
}
if(producer != null){
producer.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args) {
UMProducer producer = new UMProducer();
producer.start();
}
}
2、消息接收程序
public class UMConsumer {
private String name;
private MessageConsumer consumer = null;
private Connection connection = null;
private Session session = null;
public UMConsumer(String name){
this.name = name;
}
public void start(){
try{
//自动重连
ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory(ActiveMQConnection.DEFAULT_USER, ActiveMQConnection.DEFAULT_PASSWORD,
"failover://(tcp://127.0.0.1:61616?tcpNoDelay=true)");
connection = connectionFactory.createConnection();
connection.start();
session = connection.createSession(Boolean.FALSE, Session.CLIENT_ACKNOWLEDGE);
Destination destination = session.createQueue("queue_msg");
consumer = session.createConsumer(destination);
//异步接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
try{
if(message instanceof ObjectMessage){
ObjectMessage omsg = (ObjectMessage)message;
MessageEntity entity = (MessageEntity)omsg.getObject();
System.out.println(name + " 收到消息:" + entity.getMessage());
//确认消息
message.acknowledge();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
});
}catch(Exception ex){
ex.printStackTrace();
}
}
public void stop(){
try{
if(session != null) {
session.close();
}
if(connection != null) {
connection.close();
}
if(consumer != null){
consumer.close();
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public static void main(String[] args) {
UMConsumer consumer = new UMConsumer("UMConsumer Name");
consumer.start();
}
}