-
安装并启动
-
pom文件
-
生产者
- 创建连接并启动
- 创建session
- 创建队列
- 创建消费者
- 发送消息
- close
-
-
/** * 发送消息 * */ public class QueueSender { public static void main(String[] args) throws Exception{ /** * 1.拿到连接工厂 * 用来连接到ActivityMQ服务器 */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); /** * 2.创建连接 */ Connection connection = connectionFactory.createConnection(); /** * 3.启动连接 */ connection.start(); /** * 4.创建一个会话 * 通过连接拿到会话 */ Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); /** * 5.创建一个Destination(目的地) * 指的是消息要发送到的地方 */ Destination destination = session.createQueue("my-queue"); /** * 6.创建生成者 * 发送消息的人 */ MessageProducer producer = session.createProducer(destination); for(int i = 0 ; i < 3;i++){ /** * 7.封装具体的消息 */ TextMessage message = session.createTextMessage("message--"+i); /** * 8.发送消息 * 通过生产者发送消息 */ producer.send(message); } /** * 9.关闭会话和连接 */ session.commit(); session.close(); connection.close(); } }
-
-
消费者
- 方式一监听器
import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.TextMessage; public class ConsumerMessageListener implements MessageListener { public void onMessage(Message message) { //这里我们知道生产者发送的就是一个纯文本消息,所以这里可以直接进行强制转换,或者直接把onMessage方法的参数改成Message的子类TextMessage TextMessage textMsg = (TextMessage) message; System.out.println("接收到一个纯文本消息。"); //此处可以根据监听到的自定义返回消息,利用反射灵活调用响应方法 MapMessage mapMsg = (MapMessage) message; String ms = mapMsg.getString("messageStr") if("减库存".equals(ms){ 根据反射调用: } try { System.out.println("消息内容是:" + textMsg.getText()); } catch (JMSException e) { e.printStackTrace(); } } }
-
-
/** * 接收消息 * */ public class QueueReceiver { public static void main(String[] args) throws Exception { /** * 1.拿到连接工厂 * 用来连接到ActivityMQ服务器 */ ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); /** * 2.创建连接 */ Connection connection = connectionFactory.createConnection(); /** * 3.启动连接 */ connection.start(); /** * 4.创建一个会话 * 通过连接拿到会话 */ Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE); /** * 5.创建一个Destination(目的地) * 指的是消息要发送到的地方 */ Destination destination = session.createQueue("my-queue"); /** * 6.创建消费者 */ MessageConsumer consumer = session.createConsumer(destination); for(int i=0;i<3;i++){ /** * 7.接收消息 */ TextMessage message = (TextMessage)consumer.receive(); session.commit(); System.out.println("收到消息:" + message.getText()); } session.close(); connection.close(); } }
-
-
SpringBoot整合ActiveMQ
-
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-activemq</artifactId> </dependency>
-
- yml
spring: activemq: broker-url: tcp://127.0.0.1:61616 user: admin password: admin queue: kmx.pas.job.sgtest
@Configuration public class QueueConfig { @Value("${queue}") private String queue; @Bean public Queue logQueue() { return new ActiveMQQueue(queue); } }
@Component @EnableScheduling public class Producer { @Autowired private JmsMessagingTemplate jmsMessagingTemplate; @Autowired private Queue queue; @Scheduled(fixedDelay = 5000) public void send() { jmsMessagingTemplate.convertAndSend(queue, "测试消息队列" + System.currentTimeMillis()); } }
-
消费者
- 引入yml
- 配置类
-
@Component public class Consumer { @JmsListener(destination = "${queue}") public void receive(String msg) { System.out.println("监听器收到msg:" + msg); } }