上一章將了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
歡迎關注我的公衆號:程序江湖