您的位置:首页 > 健康 > 养生 > 消息队列-ActiveMQ

消息队列-ActiveMQ

2024/10/6 6:01:07 来源:https://blog.csdn.net/gaxing4615/article/details/139439035  浏览:    关键词:消息队列-ActiveMQ

异步技术

企业级应用中广泛使用的三种异步消息传递技术

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_55917018/article/details/122122218

三种异步消息传递技术

JMS (java message service)

一个Java规范,等同于JDBC规范,提供了与消息服务相关的API接口
JMS只 是一套接口,并没有给予实现,各大厂商和开源组织都对JMS实现不同产品,这些产品 包括:Apache的ActiveMQ、阿里的RocketMQ、IBM的MQSeries、Microsoft的MSMQ和 Spring Source的RabbitMQ等等,它们基本都遵循JMS规范。 这里介绍的ActiveMQ是最早的JMS开源产品,在Java世界使用比较广泛,在中等规模的 应用中是完全胜任的。当然,如果要真正面面对大型互联网应,要解决超高并发和吞吐 量问题,现在更推荐使用RabbitMQ、Kafuka或者RocketMQ等新一代的分布式产品,但 它们的基本原理和用法是相通的.

JMS消息模型
  • peer-2-peer: 点对点模型,消息发送到一个队列中,队列保存消息。队列中的消息只能被一个消费者消费
  • publish-subscribe: 发布订阅模型,消息可以被多个消费者消息,消费者和生产者完全独立,不需要感知对方的存在
JMS 消息种类
  • TextMessage
  • MapMessage
  • BytesMessage
  • StreamMessage
  • ObjectMessage
  • Message
JMS实现:ActiveMQ、Redis、HornetMQ、RabbitMQ、RocketMQ

AMQP(advanced message queuing protocol)

一种协议(高级消息队列协议,也是消息代理规范),规范了网络交换的数据格式
**解决:**服务跨平台,服务器供应商、生产者,消费者可以使用不同的语言来实现

AMQP消息模型:
  • direct exchange
  • fanoout exchange
  • topic exchange
  • headers exchange
  • system exchange
消息种类:byte[]
  • AMQP实现:RabbitMQ、StormMQ、RocketMQ

MQTT(Message Queueing Telemetry Transpory)

消息队列遥测传输、专为小设备涉及、是物联网生态系统中主要成分之一

实测

ActiveMQ

下载

官网下载

安装(windows)

在这里插入图片描述

启动

在这里插入图片描述在这里插入图片描述
服务端口:61616
管理后台端口:8161
ActiveMQ后台:http://127.0.0.1:8161
默认账号、密码:admin\admin

springboot 整合

        <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency>

点对点模式

server:port: 8080
spring:activemq:broker-url: tcp://localhost:61616jms:template:default-destination: com.yinhai  // 默认队列

destination:可指定

@Service
public class MessageServiceImpl  implements MessageService {@AutowiredJmsMessagingTemplate jmsTemplate;
//    private ArrayList list = new ArrayList();@Overridepublic String sendMessage(String id) {System.out.println("消息已经放入队列中了:"+id);jmsTemplate.convertAndSend("order.queue.id",id);
//        final boolean add = list.add(id);return "1";}@Overridepublic String doMessage() {
//        final Object id = list.remove(0);final String s = jmsTemplate.receiveAndConvert("order.queue.id",String.class);System.out.println("消息已经发送成功了id:"+s);return "1";}
}
JmsListener 监听

监听到队列有消息放入后立马通过入参接收消息

@SendTo(“队列名”)

将入参放入另外一个消息队列

@Component
public class ActiveMQListener {@Autowiredprivate JmsTemplate jmsTemplate;@JmsListener(destination = "order.queue.id")@SendTo("other")private String snedMessage(String message){
//        final String s = (String) jmsTemplate.receiveAndConvert();System.out.println("-------------收到后发送:"+message);return message;}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com