Kafka和RabbitMQ

       1:Dubbo远程调用所存在的性能问题

                dubbo在微服务项目中是普遍存在的,并且都是同步的,即当消费者调用生产者的时候,在生产者返回结果之前消费者的线程会进入阻塞状态,也就代表此时如果消费者不能够及时的接收到生产者返回的消息的时候,程序就无法继续向下执行如果生产者运行缓慢或者耗时较久,消费者就必须一直等待,进而导致业务整体效率底下。但是如果我们可以让消费者利用等待的时间处理更多的业务请求的,那么整体效率便会有所提升。

        2:什么是消息队列

                消息队列(Message Queue),简称MQ,它是通过异步的方式来传递数据完成业务流程的方式。

                特征:异步,削峰填谷,解耦

                缺点:重复消费,消息丢失,消息的消费顺序,数据的一致性

        重复消费:

                接口幂等(幂等函数):可以使用相同参数方法重复执行,并能获得相同结果的函数,这些函数不会影响系统状态,也不用担心重复执行会对系统造成 改变。无论多次执行,其结果都是一样的。

        消息队列的异常处理:

                如果我们们使用了消息队列,队列处理数据过程中发生异常,首先Seata就不能再使用了,因为异步无法和seata进行通信,我们就需要用特殊的方法处理异常,可以使用手写的代码进行回滚,一般来说就是由生产者再向消费者发送发送消息,消费者在接收到消息后进一步进行处理,如果消费者模块在进一步处理的时候再次发生异常,我们就可以向一个现实设置好的消息队列中发送消息。这个消息队列中没有处理者,我们称之为“死信队列"。

        常见的消息队列中间件:

                    

         3:Kafka

        软件结构:(结构简单,通过话题名称来收发信息)

扫描二维码关注公众号,回复: 14647031 查看本文章

                

Kafka Cluster:Kafka消息集群。Topic:话题(消息的收发方要依据同一个话题名称才可以保证不会将信息错发给别人)。Producter:消息的生产者(Nacos的消费者)。Consumer:消费者(Nacos的生产者)。Record:消息记录,就是生产者和消费者传递的信息内容保存在指定的Topic中。

        4:RabbitMQ

                是基于erlang语言开发的AMQP的实现,具有可靠性(持久化,传输确认,发布确认),灵活的路由,消息集群,高可用,多种协议,多语言客户端,管理界面,跟踪机制,插件机制的特性。

                结构:(通过交换机,路由key来进行确定)

猜你喜欢

转载自blog.csdn.net/qq_42218220/article/details/126561654