ActiveMQ入门学习

灰太狼 2024-04-19 15:30 121阅读 0赞

一.ActiveMQ的简介
Activemq : 是一个实现了JMS的消息中间间。该中间可跨平台,java ,c++ python ,.net都能使用,最近流行websocket ,mqtt 也能实现,但是activemq 是java写的,实现jms的规范写的!
特点:
1、支持多种语言编写客户端
2、对spring的支持,很容易和spring整合
3、支持多种传输协议:TCP,SSL,NIO,UDP等
4、支持AJAX
消息形式:
1、点对点(queue)
2、一对多(topic

二.MQ的原理
在这里插入图片描述
三.MQ的作用
1.异步操作
在这里插入图片描述
2.流量削峰
在淘宝双11的时候,晚上0点的时候会有大量的订单产生,可能会导致服务器崩溃,我们可以使用ActiveMQ使访问的流量均匀,以恒定的速率
在这里插入图片描述
3.解耦合
用户下单成功后,不需要(order-service)依赖(message-api)发起远程调用才能发送,只需要依赖mq就可以了
在这里插入图片描述
4.软总线
本质就是远程调用-》进程间的通信-》实现进程的内存共享
使用mq做软总线:
1.所有的内核都必须连接在一个mq上面
2.每个内核都能向mq里面发信息,
3.每个内核都能向mq里面读取信息。

四.ActiveMQ的安装
1.把ActiveMQ的压缩包上传到Linux系统
在这里插入图片描述
2.解压
在这里插入图片描述
3在bin目录下启动
在这里插入图片描述
4.页面
在这里插入图片描述
5.创建队列
在这里插入图片描述
6.创建主题
在这里插入图片描述
五.java操作ActiveMQ
1.导入依赖

  1. <dependency>
  2. <groupId>org.apache.activemq</groupId>
  3. <artifactId>activemq-all</artifactId>
  4. <version>5.15.9</version>
  5. </dependency>

2.接收队列的消息
public class MQApp {

  1. public static void main(String[] args) {
  2. listener();
  3. //sendQueueMsg();
  4. }
  5. public static void listener() {
  6. String brokerURL = "tcp://120.27.247.208:61616";
  7. // 1 连接工厂
  8. ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory(brokerURL);
  9. // 2 连接
  10. try {
  11. Connection connection = activeMQConnectionFactory.createConnection("admin", "admin");
  12. connection.start(); // 在监听消息时,需要手动的启动
  13. // 3 会话
  14. /**
  15. * transacted : 是否支持事务
  16. * acknowledgeMode:签收模式,仅仅在事务为false 才起作用,若是true,他没有作用
  17. * 3 种签收模式
  18. * 1 AUTO_ACK(Session.AUTO_ACKNOWLEDGE) 只要客户端拿到消息,就代表它消费成功了,mq 服务器也会删除该消息
  19. * 2 CLIENT_ACK(Session.CLIENT_ACKNOWLEDGE)客户端要拿到消息,而且必须手动确认,该消费消费成功了,mq 服务器才会删除它
  20. * 3 DUPS_ACK(批量的随机签收)和发送顺序相关,当消息的数量达到一次次数后,进行一个签收
  21. *
  22. */
  23. Session session = connection.createSession(false, Session.CLIENT_ACKNOWLEDGE);
  24. // 5 消息发送的目的地(队列)
  25. Destination destination = new ActiveMQQueue("sxt.queue");
  26. // 6 消息的消费者
  27. MessageConsumer messageConsumer = session.createConsumer(destination);
  28. System.out.println("开始监听");
  29. messageConsumer.setMessageListener(new MessageListener() { // 新启动子线程
  30. @Override
  31. public void onMessage(Message message) {
  32. System.out.println("收到消息了");
  33. ActiveMQTextMessage textMsg = (ActiveMQTextMessage) (message);
  34. try {
  35. String text = textMsg.getText(); // 获取消息的内容
  36. System.out.println("消息为:"+text);
  37. message.acknowledge(); // 手动签收消息
  38. session.commit(); // 消息被消费了,也要提交事务
  39. } catch (JMSException e) {
  40. e.printStackTrace();
  41. }
  42. }
  43. });
  44. System.in.read(); // 挂起主线程
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }finally {
  48. // 关闭资源
  49. }
  50. }
  51. 然后在运行queue 的接收端,可以看到消息已经发出了:

在这里插入图片描述
2.向队列里面发送消息
在这里插入图片描述
在运行queue 的接收端,可以看到消息已经发出了:
在这里插入图片描述

6.ActiveMQ实际上的使用(整合spring)
Spring-context
ActiveMq
Spring-Jms 在spring 里面简化对activemq的操作
Spring-Jms 对activemq 的java的做了封装,以后操作activemq ,将非常简单

  1. <dependency>
  2. <groupId>org.springframework</groupId>
  3. <artifactId>spring-context</artifactId>
  4. <version>4.3.16.RELEASE</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework</groupId>
  8. <artifactId>spring-jms</artifactId>
  9. <version>4.3.16.RELEASE</version>
  10. </dependency>
  11. <!-- https://mvnrepository.com/artifact/org.apache.activemq/activemq-all -->
  12. <dependency>
  13. <groupId>org.apache.activemq</groupId>
  14. <artifactId>activemq-all</artifactId>
  15. <version>5.15.9</version>
  16. </dependency>

1.消息的发送 spring-jms-producer.xml
在这里插入图片描述
2.spring-jms-comsumer.xml

在这里插入图片描述
发送消息
public class ActiveMQApp {

  1. public static void main(String[] args) {
  2. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-jms-comsumer.xml");
  3. JmsTemplate jmsTemplate = context.getBean(JmsTemplate.class);
  4. //jmsTemplate.send(destination, messageCreator);
  5. jmsTemplate.convertAndSend("boot");
  6. System.out.println("發送成功了");
  7. 監聽消息
  8. try {
  9. System.out.println("開始監聽");
  10. System.in.read();
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }
  14. }

}

监听器
在这里插入图片描述
一个简单的ActiveMQ就实现了 如果想要复杂使用的话,关于JMS中的生产者和消费者参数可以详细了解一下,比如能配置队列消息存活时间,消费优先级,消费模式。

发表评论

表情:
评论列表 (有 0 条评论,121人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ActiveMQ入门学习

    *一.ActiveMQ的简介** Activemq : 是一个实现了JMS的消息中间间。该中间可跨平台,java ,c++ python ,.net都能使用,最近流行...

    相关 ActiveMQ入门

    前言:最近在公司用到了activeMq接收消息,从网上查了些资料,形成了一个大概的理解,所以总结一下,因为知识都是网上学习的难免有疏漏之处,望理解。 参考: [https:

    相关 activeMQ入门

    目录 一、下载activeMQ包 二、准备Linux环境 三、所遇问题 -------------------- 一、下载activeMQ包         可

    相关 ActiveMQ入门

    ActiveMQ介绍      MQ是消息中间件,是一种在分布式系统中应用程序借以传递消息的媒介,常用的有ActiveMQ,RabbitMQ,kafka。ActiveMQ