上一章将了activemq环境搭建activemq单机环境搭建-连载1
1.Queue模式:
点对点通信,每个消息只有一个消费者,消息保证送达,离线消费者可以在下次上线后收到之前积压的消息。
以下是消费者代码:
package org.activemqstudy.queue;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;
/**
* 消费者
*
* @author bruce2018 [微信公众号:程序江湖]
* csdn:https://blog.csdn.net/zpl123456
* jianshu:https://www.jianshu.com/u/effeedbfe8d7
* juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
*/
public class AppConsumer {
public static void main(String[] args) {
consumer();
}
/**
* 生产者
*/
public static void consumer() {
Connection connection = null;
Session session = null;
MessageConsumer createConsumer = null;
try {
connection = ConnectionUtil.getInstance().createConnection();
connection.start();
session = connection.createSession(false,
Session.CLIENT_ACKNOWLEDGE);
Queue queue = session.createQueue(Constanst.QUEUE);
createConsumer = session.createConsumer(queue);
createConsumer.setMessageListener(new ConsumerListener());
} catch (JMSException e) {
e.printStackTrace();
} finally {
if (createConsumer != null) {
try {
createConsumer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
ConnectionUtil.getInstance().close(session, connection);
}
}
/**
*
* @author bruce2018
*
*/
private static class ConsumerListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText());
textMessage.acknowledge();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
以下是生产者代码:
package org.activemqstudy.queue;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;
/**
* 生产者
* @author bruce2018 [微信公众号:程序江湖]
* csdn:https://blog.csdn.net/zpl123456
* jianshu:https://www.jianshu.com/u/effeedbfe8d7
* juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
*/
public class AppQueueProduct
{
public static void main( String[] args )
{
product();
}
public static void product(){
Connection connection = null;//连接
Session session = null;//发送或者接受发送消息的线程
MessageProducer createProducer = null;//消息生产者
try {
//1.创建工厂链接对象,指定Ip和端口号
connection = ConnectionUtil.getInstance().createConnection();
//开启连接
connection.start();
//使用连接创建回话session对象
// static final int AUTO_ACKNOWLEDGE = 1; 自动确认模式,不需要客户端进行确认
// static final int CLIENT_ACKNOWLEDGE = 2; 客户端进行确认
// static final int DUPS_OK_ACKNOWLEDGE = 3; 允许重复消息
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//开始事务 也可以不用开启事务
//使用回话对象创建目标对象,包含queue或者topic
Destination de = session.createQueue(Constanst.QUEUE);
//使用回话对象创建生产者对象
createProducer = session.createProducer(de);
TextMessage textMessage = session.createTextMessage("hello bruce2018,程序江湖!");
createProducer.send(textMessage);
session.commit();//提交事务
} catch (JMSException e) {
e.printStackTrace();
try {
session.rollback();//事务回滚
} catch (JMSException e1) {
e1.printStackTrace();
}
}finally{
if(createProducer != null){
try {
createProducer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
ConnectionUtil.getInstance().close(session, connection);
}
}
}
2.Topic模式:
生产者代码:
package org.activemqstudy.topic;
import javax.jms.Connection;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;
/**
* 生产者
* @author bruce2018 [微信公众号:程序江湖]
* csdn:https://blog.csdn.net/zpl123456
* jianshu:https://www.jianshu.com/u/effeedbfe8d7
* juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
*/
public class AppTopicProduct
{
public static void main( String[] args )
{
product();
}
public static void product(){
Connection connection = null;//连接
Session session = null;//发送或者接受发送消息的线程
MessageProducer createProducer = null;//消息生产者
try {
//1.创建工厂链接对象,指定Ip和端口号
connection = ConnectionUtil.getInstance().createConnection();
//开启连接
connection.start();
//使用连接创建回话session对象
// static final int AUTO_ACKNOWLEDGE = 1; 自动确认模式,不需要客户端进行确认
// static final int CLIENT_ACKNOWLEDGE = 2; 客户端进行确认
// static final int DUPS_OK_ACKNOWLEDGE = 3; 允许重复消息
session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);//开始事务 也可以不用开启事务
//使用回话对象创建目标对象,包含queue或者topic
Destination de = session.createTopic(Constanst.TOPIC);
//使用回话对象创建生产者对象
createProducer = session.createProducer(de);
for(int i=0;i<10;i++){
TextMessage textMessage = session.createTextMessage("hello bruce2018,程序江湖!"+i);
createProducer.send(textMessage);
}
} catch (JMSException e) {
e.printStackTrace();
try {
session.rollback();//事务回滚
} catch (JMSException e1) {
e1.printStackTrace();
}
}finally{
if(createProducer != null){
try {
createProducer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
ConnectionUtil.getInstance().close(session, connection);
}
}
}
消费者代码:
package org.activemqstudy.topic;
import java.io.IOException;
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.jms.Topic;
import org.activemqstudy.util.ConnectionUtil;
import org.activemqstudy.util.Constanst;
/**
* 消费者
*
* @author bruce2018 [微信公众号:程序江湖]
* csdn:https://blog.csdn.net/zpl123456
* jianshu:https://www.jianshu.com/u/effeedbfe8d7
* juejin:https://juejin.im/post/5c8b0cfce51d4553de1fa545
*/
public class AppConsumer0 {
public static void main(String[] args) {
consumer();
}
/**
* 生产者
*/
public static void consumer() {
Connection connection = null;
Session session = null;
MessageConsumer createConsumer = null;
try {
connection = ConnectionUtil.getInstance().createConnection();
;
connection.start();
session = connection.createSession(false,
Session.CLIENT_ACKNOWLEDGE);
Topic createTopic = session.createTopic(Constanst.TOPIC);
createConsumer = session.createConsumer(createTopic);
createConsumer.setMessageListener(new ConsumerListener());
System.in.read();
} catch (JMSException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (createConsumer != null) {
try {
createConsumer.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
ConnectionUtil.getInstance().close(session, connection);
}
}
/**
*
* @author bruce2018
*
*/
private static class ConsumerListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("consumer0:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
}
代码地址:
https://github.com/zplswf/mq/tree/master/mqstudy/activemqstudy
欢迎关注我的公众号:程序江湖