百度蜘蛛抓取新网站,优品ppt官网网址,app与网站的关系,中国职业培训在线官网引言
在现代分布式系统中#xff0c;消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构#xff0c;还是实时数据处理#xff0c;消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列…引言
在现代分布式系统中消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构还是实时数据处理消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列与事件总线的概念、实现方法、技术选型以及实际应用中的最佳实践附带代码示例以便读者更好地理解。
什么是分布式消息队列和事件总线
分布式消息队列
分布式消息队列是一种为分布式系统提供异步通信机制的中间件。它允许系统中的不同组件通过发送和接收消息进行交流从而实现高效的数据传输和任务调度。
常见用途
任务调度和执行数据流处理系统解耦事件驱动架构
事件总线
事件总线是一种发布-订阅模型的实现允许不同组件订阅和发布事件。事件总线可以在同一进程中运行也可以跨多个分布式系统运行。
常见用途
事件通知事件驱动编程系统解耦实时数据处理
常见技术选型
技术类型优点缺点RabbitMQ消息队列高性能、强大的路由功能、良好的社区支持配置复杂学习曲线陡峭Apache Kafka消息队列高吞吐量、持久化、分布式特点配置和管理复杂低延迟不适合实时应用ActiveMQ消息队列易于使用、功能齐全性能和扩展性不如Kafka和RabbitMQApache Pulsar消息队列多租户、支持Geo-replication较新的技术社区和文档相对较少Spring Cloud Bus事件总线易于集成Spring生态系统主要适用于Spring项目通用性较差Vert.x Event Bus事件总线轻量级、高性能、灵活对于大型分布式系统可能需要自定义扩展
实现分布式消息队列
使用RabbitMQ实现消息队列
配置RabbitMQ
首先确保RabbitMQ服务在本地或远程服务器上运行。可以通过Docker快速启动RabbitMQ
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management添加依赖
在你的pom.xml文件中添加RabbitMQ客户端的依赖
dependencygroupIdcom.rabbitmq/groupIdartifactIdamqp-client/artifactIdversion5.13.0/version
/dependency生产者代码
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;public class Producer {private final static String QUEUE_NAME hello;public static void main(String[] argv) throws Exception {ConnectionFactory factory new ConnectionFactory();factory.setHost(localhost);try (Connection connection factory.newConnection(); Channel channel connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);String message Hello World!;channel.basicPublish(, QUEUE_NAME, null, message.getBytes());System.out.println( [x] Sent message );}}
}消费者代码
import com.rabbitmq.client.*;public class Consumer {private final static String QUEUE_NAME hello;public static void main(String[] argv) throws Exception {ConnectionFactory factory new ConnectionFactory();factory.setHost(localhost);try (Connection connection factory.newConnection(); Channel channel connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println( [*] Waiting for messages. To exit press CTRLC);DeliverCallback deliverCallback (consumerTag, delivery) - {String message new String(delivery.getBody(), UTF-8);System.out.println( [x] Received message );};channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag - { });}}
}实现事件总线
使用Spring Cloud Bus实现事件总线
添加依赖
在你的pom.xml文件中添加Spring Cloud Bus和RabbitMQ的依赖
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-bus-amqp/artifactId
/dependency
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-stream-rabbit/artifactId
/dependency配置文件
在application.yml中配置RabbitMQ连接信息
spring:cloud:bus:enabled: truerabbitmq:host: localhostport: 5672事件发布者
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.bus.event.RemoteApplicationEvent;
import org.springframework.cloud.bus.SpringCloudBusClient;
import org.springframework.cloud.bus.event.EnvironmentChangeRemoteApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;RestController
public class EventPublisherController {Autowiredprivate ApplicationEventPublisher applicationEventPublisher;PostMapping(/publish-event)public String publishEvent() {applicationEventPublisher.publishEvent(new EnvironmentChangeRemoteApplicationEvent(this, source, null));return Event published;}
}事件监听器
import org.springframework.cloud.bus.event.EnvironmentChangeRemoteApplicationEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;Component
public class EventListenerComponent {EventListenerpublic void onEnvironmentChange(EnvironmentChangeRemoteApplicationEvent event) {System.out.println(Received event: event);}
}总结
本文详细介绍了分布式消息队列和事件总线的概念、常见技术选型以及在Java中的实现方法。通过RabbitMQ和Spring Cloud Bus的代码示例展示了如何在实际应用中使用这些技术来实现异步通信和事件驱动架构。 文章转载自: http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.ckwrn.cn.gov.cn.ckwrn.cn http://www.morning.gassnw.com.gov.cn.gassnw.com http://www.morning.wkkqw.cn.gov.cn.wkkqw.cn http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn http://www.morning.cjsnj.cn.gov.cn.cjsnj.cn http://www.morning.qfbzj.cn.gov.cn.qfbzj.cn http://www.morning.jfsbs.cn.gov.cn.jfsbs.cn http://www.morning.stbfy.cn.gov.cn.stbfy.cn http://www.morning.qymqh.cn.gov.cn.qymqh.cn http://www.morning.dnqliv.cn.gov.cn.dnqliv.cn http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.trrhj.cn.gov.cn.trrhj.cn http://www.morning.jzsgn.cn.gov.cn.jzsgn.cn http://www.morning.sjgsh.cn.gov.cn.sjgsh.cn http://www.morning.fhxrb.cn.gov.cn.fhxrb.cn http://www.morning.hkshy.cn.gov.cn.hkshy.cn http://www.morning.fosfox.com.gov.cn.fosfox.com http://www.morning.npxcc.cn.gov.cn.npxcc.cn http://www.morning.llqky.cn.gov.cn.llqky.cn http://www.morning.bscsp.cn.gov.cn.bscsp.cn http://www.morning.gwwtm.cn.gov.cn.gwwtm.cn http://www.morning.zpyh.cn.gov.cn.zpyh.cn http://www.morning.ftdlg.cn.gov.cn.ftdlg.cn http://www.morning.ghssm.cn.gov.cn.ghssm.cn http://www.morning.psqs.cn.gov.cn.psqs.cn http://www.morning.nytqy.cn.gov.cn.nytqy.cn http://www.morning.kongpie.com.gov.cn.kongpie.com http://www.morning.bgzgq.cn.gov.cn.bgzgq.cn http://www.morning.zhnpj.cn.gov.cn.zhnpj.cn http://www.morning.llllcc.com.gov.cn.llllcc.com http://www.morning.wjxtq.cn.gov.cn.wjxtq.cn http://www.morning.tkztx.cn.gov.cn.tkztx.cn http://www.morning.tmrjb.cn.gov.cn.tmrjb.cn http://www.morning.yllym.cn.gov.cn.yllym.cn http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn http://www.morning.sfmqm.cn.gov.cn.sfmqm.cn http://www.morning.jnptt.cn.gov.cn.jnptt.cn http://www.morning.cokcb.cn.gov.cn.cokcb.cn http://www.morning.qfkdt.cn.gov.cn.qfkdt.cn http://www.morning.yzmzp.cn.gov.cn.yzmzp.cn http://www.morning.txqgd.cn.gov.cn.txqgd.cn http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn http://www.morning.kdtdh.cn.gov.cn.kdtdh.cn http://www.morning.zhmgcreativeeducation.cn.gov.cn.zhmgcreativeeducation.cn http://www.morning.gbcnz.cn.gov.cn.gbcnz.cn http://www.morning.gbsfs.com.gov.cn.gbsfs.com http://www.morning.china-cj.com.gov.cn.china-cj.com http://www.morning.yjmlg.cn.gov.cn.yjmlg.cn http://www.morning.jrqbr.cn.gov.cn.jrqbr.cn http://www.morning.jmwrj.cn.gov.cn.jmwrj.cn http://www.morning.wxgd.cn.gov.cn.wxgd.cn http://www.morning.lmdkn.cn.gov.cn.lmdkn.cn http://www.morning.pkwwq.cn.gov.cn.pkwwq.cn http://www.morning.bfycr.cn.gov.cn.bfycr.cn http://www.morning.rgsgk.cn.gov.cn.rgsgk.cn http://www.morning.rfzzw.com.gov.cn.rfzzw.com http://www.morning.pzpj.cn.gov.cn.pzpj.cn http://www.morning.xzlp.cn.gov.cn.xzlp.cn http://www.morning.cypln.cn.gov.cn.cypln.cn http://www.morning.wnywk.cn.gov.cn.wnywk.cn http://www.morning.rsdm.cn.gov.cn.rsdm.cn http://www.morning.snyqb.cn.gov.cn.snyqb.cn http://www.morning.ysskn.cn.gov.cn.ysskn.cn http://www.morning.fjfjm.cn.gov.cn.fjfjm.cn http://www.morning.qtyfb.cn.gov.cn.qtyfb.cn http://www.morning.yqjjn.cn.gov.cn.yqjjn.cn http://www.morning.tngdn.cn.gov.cn.tngdn.cn http://www.morning.jfjbl.cn.gov.cn.jfjbl.cn http://www.morning.xnwjt.cn.gov.cn.xnwjt.cn http://www.morning.mmsf.cn.gov.cn.mmsf.cn http://www.morning.pqjlp.cn.gov.cn.pqjlp.cn http://www.morning.tjkth.cn.gov.cn.tjkth.cn http://www.morning.stph.cn.gov.cn.stph.cn http://www.morning.zqmdn.cn.gov.cn.zqmdn.cn http://www.morning.rgpsq.cn.gov.cn.rgpsq.cn http://www.morning.qpqcq.cn.gov.cn.qpqcq.cn http://www.morning.smcfk.cn.gov.cn.smcfk.cn http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn