配置Maven所需的依賴,示例如下
<dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.2.0</version> </dependency> <dependency> <groupId>org.apache.xbean</groupId> <artifactId>xbean-spring</artifactId> <version>3.7</version> </dependency>
Queue消息發送的示例代碼如下:
public class JmsProducer {
public static void main(String[] args) {
try {
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://39.96.192.171:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 3; i++) {
TextMessage message = session.createTextMessage("message--" + i);
Thread.sleep(1000);
//通過消息生產者發出消息
producer.send(message);
}
session.commit();
session.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
然後運行這個類
可以看到隊列中我們自定義的my-queue,中有3個還沒有被消費的消息!
接下來我們編寫消費者來消費消息!
public class JmsReceiver {
public static void main(String[] args) {
try {
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://39.96.192.171:61616");
Connection connection = cf.createConnection();
connection.start();
final Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("my-queue");
MessageConsumer consumer = session.createConsumer(destination);
int i = 0;
while (i < 3) {
i++;
TextMessage message = (TextMessage) consumer.receive();
session.commit();
System.out.println("收到消息:" + message.getText());
}
session.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行這個類!可以看到控制檯收到3條消息!
再看activemq控制檯
可以看到有3條消息顯示被消費!
這就是簡單的消息生產和消費!消息消費分爲兩種方式,同步消費和異步消費,上面的例子就是同步消費,通過調用消費者的receive方法從目的地中顯式提取消息,receive 方法可以一直阻塞到消息到達。
然後再寫一個異步消費的例子!
public class JmsReceiver2 implements MessageListener {
public void onMessage(Message message) {
try {
TextMessage textMessage = (TextMessage) message;
if (null != message) {
System.out.println("收到的消息:" + textMessage.getText());
}
// 如果session設置爲Session.CLIENT_ACKNOWLEDGE,要加上這一步
message.acknowledge();
} catch (Exception e) {
e.printStackTrace();
}
}
}