1、pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.9.0</version>
</dependency>
2、queue队列
生产者
package com.px.activemq;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class ProducerMQ {
//activemq支持字节流通信,所以这里用用tcp,而不是http
private static final String mqUrl = "tcp://47.98.149.58:61616";
private static final String queneName = "testquene";
public static void main(String[] args) throws JMSException {
//1、创建工厂
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(mqUrl);
//2、创建连接
Connection connection = factory.createConnection(queneName,mqUrl);
//3、建立连接
connection.start();
/*
Session.AUTO_ACKNOWLEDGE为自动确认,客户端发送和接收消息不需要做额外的工作。
Session.CLIENT_ACKNOWLEDGE为客户端确认。客户端接收到消息后,必须调用javax.jms.Message的acknowledge方法。jms服务器才会删除消息。
DUPS_OK_ACKNOWLEDGE允许副本的确认模式。一旦接收方应用程序的方法调用从处理消息处返回,会话对象就会确认消息的接收;而且允许重复确认。在需要考虑资源使用时,这种模式非常有效。
*/
//4、创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、创建destination
Destination destination = session.createQueue(queneName);
//6、创建生产者
MessageProducer producer = session.createProducer(destination);
for (int i = 0; i < 100; i++) {
//7、消息体
TextMessage textMessage = session.createTextMessage("test" + i);
//8、发送消息
producer.send(textMessage);
System.out.println("发送的消息为"+textMessage.getText());
}
//9、关闭连接
connection.close();
}
}
消费者
package com.px.activemq;
import org.apache.activemq.ActiveMQConnectionFactory;
import javax.jms.*;
public class ComsumerMQ {
private static final String mqUrl = "tcp://47.98.149.58:61616";
private static final String queneName = "testquene";
public static void main(String[] args) throws JMSException {
//1、创建工厂
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(mqUrl);
//2、创建连接
Connection connection = factory.createConnection(queneName,mqUrl);
//3、建立连接
connection.start();
//4、创建session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//5、创建destination
Destination destination = session.createQueue(queneName);
//6、创建Comsumer
MessageConsumer consumer = session.createConsumer(destination);
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println("接受到的消息是:"+textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
queue为队列模式,当producer发布消息时,每个comsumer分摊总消息。
3、主题订阅 topic
topic为主题订阅模式,当producer发布消息时,每一个comsumer都可以收到所有消息