点对点模式下的MQ大致上做了这么个事情,主要是解耦和异步
ActiveMQ安装,搭建忽略,先上生产者代码:
public class MqProducer {
public static void main(String[] args) throws JMSException {
// 第一步:创建ConnectionFactory连接工厂
ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD, ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
// 第二步:创建Connection
Connection connection = factory.createConnection();
// 第三步:创建Session
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 第四步:创建Destination
Destination destination = session.createQueue("demo1");
// 第五步:创建MessageProducer
MessageProducer producer = session.createProducer(destination);
// 第六步:设置持久化方式
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
// 第七步:定义消息对象,并发送
TextMessage message = session.createTextMessage();
message.setText("gogogo!");
producer.send(message);
// 第八步:关闭连接
if (connection != null) {
connection.close();
}
}
}
启动 activemq.bat
http://localhost:8161/
可以看到这个消息丢进去了。
public class Consumer {
public static void main(String[] args) throws JMSException {
// 1、创建工厂连接对象
ConnectionFactory factory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_BROKER_URL);
// 2、使用连接工厂创建一个连接对象
Connection connection = factory.createConnection();
// 3、开启连接
connection.start();
// 4、使用连接对象创建会话(session)对象
Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
// 5、使用会话对象创建目标对象,包含queue和topic(一对一和一对多)
Queue queue = session.createQueue("demo1");
// 6、使用会话对象创建生产者对象
MessageConsumer consumer = session.createConsumer(queue);
// 7、向MessageConsumer对象中设置一个MessageListener对象,用来接收消息
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
}
});
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// 9、关闭资源
consumer.close();
session.close();
connection.close();
}
}
执行之后 输出gogogo!
然后打开MQ控制台发现消息被Consumer消费