当前位置: 首页 > news >正文

网站开发收费标准网站管理员密码忘记

网站开发收费标准,网站管理员密码忘记,照明工业网站建设,做网站需要公章吗引言 在现代分布式系统中,消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构,还是实时数据处理,消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列…

引言

在现代分布式系统中,消息队列和事件总线已经成为实现松耦合、高扩展性和高可用性架构的关键组件。无论是微服务架构、事件驱动架构,还是实时数据处理,消息队列和事件总线都扮演着至关重要的角色。本文将深入探讨Java中的分布式消息队列与事件总线的概念、实现方法、技术选型以及实际应用中的最佳实践,附带代码示例以便读者更好地理解。

什么是分布式消息队列和事件总线?

分布式消息队列

分布式消息队列是一种为分布式系统提供异步通信机制的中间件。它允许系统中的不同组件通过发送和接收消息进行交流,从而实现高效的数据传输和任务调度。

常见用途:
  • 任务调度和执行
  • 数据流处理
  • 系统解耦
  • 事件驱动架构
事件总线

事件总线是一种发布-订阅模型的实现,允许不同组件订阅和发布事件。事件总线可以在同一进程中运行,也可以跨多个分布式系统运行。

常见用途:
  • 事件通知
  • 事件驱动编程
  • 系统解耦
  • 实时数据处理

常见技术选型

技术类型优点缺点
RabbitMQ消息队列高性能、强大的路由功能、良好的社区支持配置复杂,学习曲线陡峭
Apache Kafka消息队列高吞吐量、持久化、分布式特点配置和管理复杂,低延迟不适合实时应用
ActiveMQ消息队列易于使用、功能齐全性能和扩展性不如Kafka和RabbitMQ
Apache 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客户端的依赖:

<dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.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 CTRL+C");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的依赖:

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-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.yayakq.cn/news/248118/

相关文章:

  • 怎么做网站网站的代理asp医院网站源码
  • php网站开发实际教程答案seo sem区别
  • 电子商务网站建设哪好石家庄网络公司招聘
  • 简单的房源展示网站开发可以推广网站
  • 眉山市建设局网站个人网站设计成品下载
  • 做房产推广那个网站好郑州app定制开发公司
  • 建好的网站怎么用运营好还是网站开发好
  • 九江建网站七牛 wordpress 图床
  • 正规网站建设报价网页模板免费下载网站
  • php网站怎么修改后台地址成都专业网站设计制作
  • 网站标识代码怎么加深圳网站建设招标
  • 网站建设关键词布局衡水网站推广
  • 深圳网站建设深圳企业网站建设网站怎么增加代码
  • 网站落地页是什么意思磁力网站怎么做的源码
  • 网站域名注册时间wordpress显示目录结构
  • 商务网站需求说明书鹤壁北京网站建设
  • 宜昌网站制作公司排名怎么做废品收购网站
  • 做公司网站需要的材料有哪些北京怎么样做网站
  • 公司网站设计手表网站欧米茄官网
  • 网站 维护 页面微网站开发平台wizi
  • 网站建设的推进方案网站制作规划设计内容
  • 网站有死链怎么办网站去哪里备案
  • 镜美硅藻泥网站是那家公司做的wordpress该字体
  • 网站开发制作学徒制作软件需要什么工具
  • 为何网站不被百度收录中企动力科技股份有限公司深圳分公司
  • 郴州建设网站邻水县规划和建设局 网站
  • 用canvas做网站做关键词优化
  • 做网站都去哪申请网址一般网站的宽度
  • 马鞍山建设局网站半厘米wordpress
  • 由一个网页建成的网站简单的html网页制作模板免费