安装:使用服务安装,不用每次启动“黑匣子”。
启动之后浏览器可以进入后台管理:
代码演示两种消息模式:
pom.xml:
<dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-core</artifactId> <version>5.7.0</version> </dependency> </dependencies>队列消息模式:
生产方:
public class AppProducer { private static final String url = "tcp://127.0.0.1:61616"; private static final String queueName = "queue-test"; public static void main(String[] args) throws JMSException { /** 1.创建ConnectionFactory */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); /** 2.创建Connection */ Connection connection = connectionFactory.createConnection(); /** 3.启动 */ connection.start(); /** 4.创建会话 */ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); /** 5.创建目标 */ Destination destination = session.createQueue(queueName); /** 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(); } }运行可以看到后台:
消费方:
public class AppConsumer { private static final String url = "tcp://127.0.0.1:61616"; private static final String queueName = "queue-test"; public static void main(String[] args) throws JMSException { /** 1.创建ConnectionFactory */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); /** 2.创建Connection */ Connection connection = connectionFactory.createConnection(); /** 3.启动 */ connection.start(); /** 4.创建会话 */ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); /** 5.创建目标 */ Destination destination = session.createQueue(queueName); /** 6.创建一个消费者 */ MessageConsumer consumer = session.createConsumer(destination); /** 7.创建一个监听器 */ consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage message1 = (TextMessage) message; try { System.out.print("接收消息:"+message1.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); /** 8.关闭连接 */ // connection.close(); } }多个消费者运行结果:接收的消息是不同的,基本上均摊
主题模式: 生产方:
public class AppProducer { private static final String url = "tcp://127.0.0.1:61616"; private static final String topicName = "topic-test"; public static void main(String[] args) throws JMSException { /** 1.创建ConnectionFactory */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); /** 2.创建Connection */ Connection connection = connectionFactory.createConnection(); /** 3.启动 */ connection.start(); /** 4.创建会话 */ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); /** 5.创建目标 */ Destination destination = session.createTopic(topicName); /** 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(); } }运行可看到:
消费方:
public class AppConsumer { private static final String url = "tcp://127.0.0.1:61616"; private static final String topicName = "topic-test"; public static void main(String[] args) throws JMSException { /** 1.创建ConnectionFactory */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(url); /** 2.创建Connection */ Connection connection = connectionFactory.createConnection(); /** 3.启动 */ connection.start(); /** 4.创建会话 */ Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); /** 5.创建目标 */ Destination destination = session.createTopic(topicName); /** 6.创建一个消费者 */ MessageConsumer consumer = session.createConsumer(destination); /** 7.创建一个监听器 */ consumer.setMessageListener(new MessageListener() { public void onMessage(Message message) { TextMessage message1 = (TextMessage) message; try { System.out.print("接收消息:"+message1.getText()); } catch (JMSException e) { e.printStackTrace(); } } }); /** 8.关闭连接 */ // connection.close(); } }如果先发布消息,再运行消费方接收消息,消费方是接收不到任何信息的,消费方需要先订阅,才能接收到消息。
主题模式多个消费方收到全部的消息,是完全一样的。