java消息中间件ActiveMQ学习(二)
接着上回说到,ActiveMq相关基础操作已经完成。下面就是实际操作啦。。。有点小激动。。。好了,废话不多说!!!
1、消息模式:queue(点对点)模式、topic(发布/订阅)模式
queue(点对点)模式:在点对点的传输方式,数据被持久化,在传输的过程中不会丢失。一对一的发布接受方式,保证了数据的完整。
topic(发布/订阅)模式:可以有多个消息消费者一起对同一个消息消费(也就是订阅)。也就是一对多的传输方式,和queue(点对点)传输方式有些不同,它可以被所有的消费者所订阅。
在这就不详细说消息持久化订阅了。。。
2、queue(点对点)模式的实现代码
不管你是创建普通的java项目还是创建maven项目,如果你是创建普通的java项目你只要把相应的jar包导入项目中,如下图所示:
如果是maven项目的话,只需要在pom.xml文件中加入,如下代码:
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-all</artifactId>
<version>5.15.2</version>
</dependency>
更新一下本地maven库就行了。
(1)、queue/topic-消息生产者相关代码:
public static void main(String[] args) throws JMSException{
//连接账号
String username = "";
//连接密码
String pwd = "";
//连接地址
String tcp = "";
// 连接到ActiveMQ服务器
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(username,pwd,tcp);
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
//点对点模-主题
Queue queue = session.createQueue("slimsmart.topic.test");
//topic(发布与订阅)模式-主题
MessageProducer producer = session.createProducer(queue);
// NON_PERSISTENT 非持久化 PERSISTENT 持久化,发送消息时用使用持久模式
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
TextMessage message = session.createTextMessage();
message.setText("queue 消息。");
message.setStringProperty("property", "test");
// 发布主题消息
producer.send(message);
session.commit();
session.close();
connection.close();
}
(2)、queue/topic-消息消费者相关代码
public static void main(String[] args) throws JMSException{
//连接账号
String username = "";
//连接密码
String pwd = "";
//连接地址
String tcp = "";
//消费者唯一标识(订阅者)
String clientId = "client_id";
// 连接到ActiveMQ服务器
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(username,pwd,tcp);
Connection connection = factory.createConnection();
//客户端ID,持久订阅需要设置
connection.setClientID(clientId);
connection.start();
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//queue-主题(需要与生产者主题一致,否则无法获取消息)
Destination queue = session.createQueue("test");
//topic-主题
//Topic topic = session.createTopic("test");
//queue-创建持久订阅,指定客户端ID。
MessageConsumer consumer = session.createConsumer(queue,clientId);
// topic - 创建持久订阅,指定客户端ID。
//MessageConsumer consumer = session.createDurableSubscriber(topic,clientId);
consumer.setMessageListener(new MessageListener() {
// 订阅接收方法
@Override
public void onMessage(Message message) {
TextMessage tm = (TextMessage) message;
try {
System.out.println("消费一条:" tm.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
以上代码演示中,全部都是文本消息类型。那activeMq都有哪些消息类型呢?将在下一篇说明。