<!--activemq 所需-->
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.9</version>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-pool</artifactId>
<version>5.15.9</version>
</dependency>
<dependency>
<groupId>org.apache.xbean</groupId>
<artifactId>xbean-spring</artifactId>
<version>3.16</version>
</dependency>
JMSProducerQueue
public class JmsProduce {
public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws JMSException {
// 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2、通過連接工廠,獲得連接Connection
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
// 3、創建會話session
// 兩個參數,第一個叫事務/第二個叫簽收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4、創建目的地(具體是隊列還是主體topic)
Queue queue = session.createQueue(QUEUE_NAME);
// 5、創建消息的生產者
MessageProducer producer = session.createProducer(queue);
// 6、通過使用producer 生產3條消息發送到mq的隊列裏面
for (int i = 0; i < 6; i++) {
// 7、創建消息,好比快遞
TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
// 8、通過producer發送給mq
producer.send(textMessage);
}
// 9、關閉資源
producer.close();
session.close();
connection.close();
System.out.println("消息發送到mq完成");
}
}
JmsConsumeQueue
public class JmsConsume {
public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
public static final String QUEUE_NAME = "queue01";
public static void main(String[] args) throws Exception {
System.out.println("我是1號");
// 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2、通過連接工廠,獲得連接Connection
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
// 3、創建會話session
// 兩個參數,第一個叫事務/第二個叫簽收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4、創建目的地(具體是隊列還是主體topic)
Queue queue = session.createQueue(QUEUE_NAME);
// 5、創建消費者
MessageConsumer consumer = session.createConsumer(queue);
/**
同步阻塞方式 receive()
訂閱者或接受者調用MessageConsumer的receive()方法來接受信息,receive方法能夠接收到消息之前(或超時之前)將一直阻塞
while(true){
TextMessage textMessage = (TextMessage)consumer.receive(4000L);
if(null != textMessage){
System.out.println("消費者接受到消息"+textMessage.getText());
}else{
break;
}
}
// 6、關閉資源
consumer.close();
session.close();
connection.close();
**/
// 通過監聽的方式來消費消息
/**
* 異步非阻塞方式(監聽器onMessage())
* 訂閱者或接受者通過MessageConsumer的setMessageListener(MessageListener listener)註冊一個消息監聽器
* 當消息到達之後,系統自動調用監聽器MessageListener的onMessage(Message message) 方法
*/
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (null != message && message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println("消費者接收到消息" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
// 保持程序運行 還沒有消費到消息就關掉了連接
System.in.read();
consumer.close();
session.close();
connection.close();
System.out.println("接受到");
/**
* 1、先生產, 只啓動1號消費者, 問題:1號 消費者能消費消息麼
* √
* 2、先生存,先啓動1號消費者再啓動2號,問題:2號消費者還能消費消息麼?
* 2.1、1號可以消費 √
* 2.2、2號可以消費 ×
* 3、先啓動2個消費者,再生產6條消息,消費情況如何?
* 3.1、2個消費者都有6條
* 3.2、先到先得 6條全給一個
* 3.3、一人一半 √
*/
}
}
JmsProduceTopic
public class JmsProduce_topic {
public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
public static final String TOPIC_NAME = "topic01";
public static void main(String[] args) throws JMSException {
// 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2、通過連接工廠,獲得連接Connection
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
// 3、創建會話session
// 兩個參數,第一個叫事務/第二個叫簽收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4、創建目的地(具體是隊列還是主體topic)
Topic queue = session.createTopic(TOPIC_NAME);
// 5、創建消息的生產者
MessageProducer producer = session.createProducer(queue);
// 6、通過使用producer 生產3條消息發送到mq的隊列裏面
for (int i = 0; i < 6; i++) {
// 7、創建消息,好比快遞
TextMessage textMessage = session.createTextMessage("msg——》" + i);// 理解爲一個字符串
// 8、通過producer發送給mq
producer.send(textMessage);
}
// 9、關閉資源
producer.close();
session.close();
connection.close();
System.out.println("消息發送到mq完成");
}
}
JmsConsumeTopic
public class JmsConsumeTopic {
public static final String ACTIVEMQ_URL = "tcp://192.168.150.128:61616";
public static final String TOPIC_NAME = "topic01";
public static void main(String[] args) throws Exception {
System.out.println("我是1號");
// 1、創建連接工廠 按照給定的url地址,採用默認的用戶名和密碼
ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(ACTIVEMQ_URL);
// 2、通過連接工廠,獲得連接Connection
Connection connection = activeMQConnectionFactory.createConnection();
connection.start();
// 3、創建會話session
// 兩個參數,第一個叫事務/第二個叫簽收
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// 4、創建目的地(具體是隊列還是主體topic)
Topic topic = session.createTopic(TOPIC_NAME);
// 5、創建消費者
MessageConsumer consumer = session.createConsumer(topic);
// 通過監聽方式收取主題消息
consumer.setMessageListener((message)->{
if (null != message && message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
String username = textMessage.getStringProperty("username");
System.out.println(username);
System.out.println("消費者接收到topic消息" + textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
if (null != message && message instanceof MapMessage) {
MapMessage mapMessage = (MapMessage) message;
try {
System.out.println("消費者接收到topic消息" + mapMessage.getString("aa"));
} catch (JMSException e) {
e.printStackTrace();
}
}
});
// 保持程序運行 還沒有消費到消息就關掉了連接
System.in.read();
consumer.close();
session.close();
connection.close();
}
}