首先我們在這裏要說一下消息中間件中有兩個角色,生產者Producer與消費者Consumer,簡單理解即使發發送消息者與接收消息者,在編寫代碼之前我們需要將下載到的ActiveMQ壓縮包中的activemq-all-5.13.4.jar包導入項目,接下來我們用代碼展示一下ActiveMQ的獨特魅力。
Producer類:
package com.yc.mytest;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MyProducer {
private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL; //默認的連接地址
private static String TOPIC_NAME="MyTopicTest"; //topic名字
public static void main(String[] args) {
ConnectionFactory factory; //連接工廠
Connection conn = null; //連接
Session session; //會話
Destination dest; //消息的目的地
MessageProducer producer; //消息生產者
try {
//初始化連接工廠
factory=new ActiveMQConnectionFactory(URL);
//獲取連接
conn=factory.createConnection();
//開始連接
conn.start();
//創建Session,此方法第一個參數表示會話是否在事務中執行,第二個參數設定會話的應答模式
session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
//創建topic,producer和consumer將根據TOPIC_NAME來發送/接收對應的消息
dest=session.createTopic(TOPIC_NAME);
//創建生產者
producer=session.createProducer(dest);
//發送消息
sendMessage(session, producer);
} catch (Exception e) {
System.out.println("出錯啦!!!");
e.printStackTrace();
} finally{
if(conn!=null){
try {
//關閉連接
conn.close();
} catch (JMSException e) {
e.printStackTrace();
}
}
}
}
private static void sendMessage(Session session,MessageProducer producer) throws JMSException{
//初始化一個mq消息
TextMessage message = session.createTextMessage() ;//= session.createTextMessage("你好 ActiveMq " + i);
//填寫消息內容
message.setText("你好 ActiveMq");
//發送消息
producer.send(message);
System.out.println("消息發送成功!!!");
}
}
Consumer類:
package com.yc.mytest;
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.Session;
import javax.jms.TextMessage;
import org.apache.activemq.ActiveMQConnection;
import org.apache.activemq.ActiveMQConnectionFactory;
public class MyConsumer implements MessageListener {
private static final String URL=ActiveMQConnection.DEFAULT_BROKER_URL; //默認的連接地址
private static String TOPIC_NAME="MyTopicTest"; //topic名字
public static void main(String[] args) {
ConnectionFactory factory; //連接工廠
Connection conn = null; //連接
Session session; //會話
Destination dest; //消息的目的地
MessageConsumer consumer; //消費者
try {
//初始化連接工廠
factory=new ActiveMQConnectionFactory(URL);
//獲取連接
conn=factory.createConnection();
//開始連接
conn.start();
//創建Session,此方法第一個參數表示會話是否在事務中執行,第二個參數設定會話的應答模式
session=conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
//創建topic,producer和consumer將根據TOPIC_NAME來發送/接收對應的消息
dest=session.createTopic(TOPIC_NAME);
//創建消費者
consumer=session.createConsumer(dest);
//初始化MessageListener
MyConsumer me=new MyConsumer();
//給消費者設定監聽對象
consumer.setMessageListener(me);
} catch (Exception e) {
System.out.println("出錯啦!!!");
e.printStackTrace();
}
}
public void onMessage(Message message) {
TextMessage txtMessage = (TextMessage)message;
String text;
try {
text=txtMessage.getText();
//txtMessage.acknowledge(); //通知服務器
System.out.println("收到消息:"+text);
} catch (JMSException e) {
System.out.println("出錯啦!!!");
e.printStackTrace();
}
}
}
好,到現在,我們的代碼就實現了。0.0簡單吧,我們來運行一下,在topic模式下需要先啓動消費者,在這裏我們啓動兩個消費者來模擬羣發
啓動生產者發送信息
在去看兩個消費者,會收到同樣的信息
我們去監控中看下信息
好,到此,我們最簡單的Topic模式就已經實現了