上云记之消息中间件

网友投稿 271 2022-10-02

上云记之消息中间件

Azure上有两种消息队列的产品,分别是 Azure Queue Storage 和 ServiceBus. 如何选择呢。 下面列出两种产品主要特点以及是否适合我们的需求

· Storage Queue

1. Azure 存储基础结构的一部分,具有简单的基于 REST 的 GET/PUT/PEEK 接口,可在服务内部和服务之间提供可靠、持久的消息传送

2. 不支持消息推送/监听,即不能使用类似RabbitListener的监听机制,只能QueueClient取数据

3. 适合用于存储和管理大于80GB的队列。

4. 不支持FIFO(先进先出)

5. 无死信队列

· Service Bus

1. Azure 消息传送基础结构的一部分,可支持队列以及发布/订阅和更高级的集成模式

2. 支持消息推送/监听,可以使用类似RabbitListener的机制,Service Bus使用JmsListener,或者QueueClient注册

3. 队列容量不要超过80GB

4. 基于 AMQP 1.0 标准的消息传送协议

5. 保证FIFO

6. 支持死信队列

相比之下,Sevice Bus的特性(以上粗体显示之特性)更适合替代RabbitMQ作为上云之后的PaaS消息中间件。

下面分享下如何具体替换:

1. AMQP中队列,订阅/发布概念在RabbitMQ中是通过exchange 类型(direct 和 topic)来实现的。那么Service Bus可以通过如下步骤来分别创建Subscriptions和 Topics:快速整合ServiceBus 到springboot 发送和接收消息,JMS方式。

1) 添加pom依赖

com.microsoft.azure azure-servicebus-jms-spring-boot-starter

2) 添加链接字符串到配置文件

spring.jms.servicebus.connection-string=Endpoint=sb://my-servicebus.servicebus.chinacloudapi.cn/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx spring.jms.servicebus.idle-timeout=1800000

3) 生产者通过JmsTemplate发送消息

@Autowired private JmsTemplate jmsTemplate; public void postMessage(@RequestParam String message) { jmsTemplate.convertAndSend(QUEUE_NAME, new User(message)); }

4) 消费者添加监听器

@JmsListener(destination = QUEUE_NAME, containerFactory = "jmsListenerContainerFactory") public void receiveMessage(User user) { logger.info("Received message from queue: {}", user.getName()); }

注:整合springboot更详细信息可参考Azure文档

· JMS方式:Spring Cloud Azure Stream Binder 方式:https://docs.microsoft.com/zh-cn/azure/developer/java/spring-framework/configure-spring-cloud-stream-binder-java-app-with-service-bus

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:上云记之监控
下一篇:Java实现替换Word中文本和图片功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~