怎么在SpringCloud中实现一个巴士消息总线

  介绍

这篇文章给大家介绍怎么在SpringCloud中实现一个巴士消息总线,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

架构图所示:

怎么在SpringCloud中实现一个巴士消息总线

春云总线除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的卡夫卡。在本文中,我们将搭建一个卡夫卡的本地环境,并通过它来尝试使用春云总线对卡夫卡的支持,实现消息总线的功能。

卡夫卡使用Scala实现,被用作LinkedIn的活动流和运营数据处理的管道,现在也被诸多互联网企业广泛地用作为数据流管道和消息系统。

<强> Kafak架构图如下:

怎么在SpringCloud中实现一个巴士消息总线

<强>卡夫卡是基于消息发布/订阅模式实现的消息系统,其主要设计目标如下:

1。消息持久化:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。

2。高吞吐:在廉价的商用机器上也能支持单机每秒100 k条以上的吞吐量

3。分布式:支持消息分区以及分布式消费,并保证分区内的消息顺序

4。跨平台:支持不同技术平台的客户端(如:Java、PHP、Python等)

5。实时性:支持实时数据处理和离线数据处理

6。伸缩性:支持水平扩展

<强>卡夫卡中涉及的一些基本概念:

1.代理:卡夫卡集群包含一个或多个服务器,这些服务器被称为代理。

2.主题:逻辑上同兔的队列队列相似,每条发布到卡夫卡集群的消息都必须有一个主题。(物理上不同主题的消息分开存储,逻辑上一个话题的消息虽然保存于一个或多个代理上,但用户只需指定消息的主题即可生产或消费数据而不必关心数据存于何处)

3.分区:分区是物理概念上的分区,为了提供系统吞吐率,在物理上每个话题会分成一个或多个分区,每个分区对应一个文件夹(存储对应分区的消息内容和索引文件)。

4。制作人:消息生产者,负责生产消息并发送到卡夫卡代理。

5。消费者:消息消费者,向卡夫卡代理读取消息并处理的客户端。

6。消费群体:每个消费者属于一个特定的组(可为每个消费者指定属于一个组,若不指定则属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。

可以从卡夫卡的架构图看到卡夫卡是需要管理员支持的,你需要在你的卡夫卡配置里面指定饲养员在哪里,它是通过饲养员做一些可靠性的保证,做代理的主从,我们还要知道卡夫卡的消息是形以主题式作为组织的,生产商发送主题形式的消息,消费者是按照组来分的,所以,一组消费者都会都要同样的话题形式的消息。在服务端,它还做了一些分片,那么一个主题可能分布在不同的分片上面,方便我们拓展部署多个机器,卡夫卡是天生分布式的。这里为了演示,我们只需要用它的默认配置,在windows上做个小演示即可。

我们这里主要针对春云总线对卡夫卡的支持,实现消息总线的功能,具体的卡夫卡,RabbitMQ消息队列希望自己去找资料来学习一下。有了一些概念的支持后,我们进行一些演示。

如下:首先新建一个springCloud-config-client1模块,方便我们进行测试所引入的依赖如下:

& lt; dependency>   ,,,,,& lt; groupId> org.springframework.boot   ,,,,,& lt; artifactId> spring-boot-starter-actuator   ,,,& lt;/dependency>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.boot   ,,,,,& lt; artifactId> spring-boot-starter-web   ,,,& lt;/dependency>      ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-starter-config   ,,,,,& lt; version> 1.4.0.RELEASE   ,,,& lt;/dependency>   ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-starter-eureka   ,,,,,& lt; version> 1.3.5.RELEASE   ,,,& lt;/dependency>      ,,,& lt; dependency>   ,,,,,& lt; groupId> org.springframework.cloud   ,,,,,& lt; artifactId> spring-cloud-starter-bus-kafka   ,,,,,& lt; version> 1.3.2.RELEASE   ,,,& lt;/dependency>

接着要注意一下,client1的配置文件要改为引导。yml,因为这种配置格式,是优先加载的,上一篇随笔有讲过,client1的配置如下:

怎么在SpringCloud中实现一个巴士消息总线