安装
从activemq.apche.org官网下载最新版apache-activemq-5.16.1-bin.tar.gz,上传到linux服务器(windows版会出现一些问题,如我的主机名有汉字无法启动)
启动
bin/activemq start
可通过访问前台 curl localhost:8161/admin 验证是否启动成功
点对点方式(生产者)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://192.168.232.128:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("queue");
MessageProducer producer = session.createProducer(destination);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
for (int i=0;i<=5;i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("我是第"+i+"消息");
producer.send(textMessage);
}
if(connection!=null){
connection.close();
}
点对点方式(消费者)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://192.168.232.128:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.FALSE,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue("queue");
MessageConsumer consumer = session.createConsumer(destination);
while (true){
TextMessage message = (TextMessage) consumer.receive();
if (message==null){
break;
}
System.out.println(message.getText());
}
if(connection!=null){
connection.close();
}
发布订阅模式(生产者)
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://192.168.232.128:61616");
Connection connection = factory.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("test-topic");
MessageProducer producer = session.createProducer(topic);
for (int i=0;i<=5;i++) {
TextMessage textMessage = session.createTextMessage();
textMessage.setText("我是第"+i+"消息");
producer.send(textMessage);
}
if(connection!=null){
connection.close();
}
发布订阅模式(消费者)
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(ActiveMQConnectionFactory.DEFAULT_USER,
ActiveMQConnectionFactory.DEFAULT_PASSWORD,"tcp://192.168.232.128:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
Session session = connection.createSession(Boolean.TRUE,Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createTopic("test-topic");
MessageConsumer consumer = session.createConsumer(destination);
while (true){
TextMessage message = (TextMessage) consumer.receive();
if (message==null){
break;
}
System.out.println(message.getText());
}
if(connection!=null){
connection.close();
}
主要区别
如果有多个消费者同时接收消息,发布订阅模式下每个消费者都能得到全部的消息,而点对点模式只能平分这些消息