RabbitMQ深入理解

1.为什么要使用消息中间件?

生产能力远大于消费能力,如支付,支付的请求比较多,但是处理速度很慢,服务器中如果Http请求不能及时处理会消耗内存暂存请求慢慢处理,进而导致内存崩盘,从而我们希望有一个类似队列东西装载请求,能处理请求过多的情况,于是引入中间件

2.引入中间工具带来的问题

      中间工具分割开了原本100%可靠请求流程,例如:A-->B(RPC或者直连都能实现可靠通信),现在变成了A-->C-->B,  C不可靠(宕机,数据传输丢失),怎么保证 A100%到C,而B接收到C的数据又100%能消费到:

      投递消息确认模式实现了 A 100% 把消息投递到了C 且C能实现了持久化,此时A能收到C的投递回执,即A-->C 100%可靠

      C-->B,B主动去拉取C,C实现了消息消费确认机制,于是B拉取消息,且实现了逻辑后可以设置消费确认,告诉C:B已处理了消息,思考:如果B业务流程是 :操作数据库->消费回执,数据库操作完后回执不一定能执行到,此时消息还在消费队列中,即存在消息重复消费性;

引入以下问题:

1).消息投递100%可达性 (投递确认策略已解决)

2).重复消费(业务接口幂等性or事务锁)

3).中间件高可用问题 (集群)

4).中间件容灾恢复能力 (持久化数据文件恢复)

下篇再详细介绍

3.RabbitMQ 5中工作模式

rabbitmq的抽象交换机实现有5中

交换机构造器

RabbitMQ深入理解_第1张图片构造器参数详解

   Exchange.DeclareOk exchangeDeclare(
        String exchange, //交换机name
        BuiltinExchangeType type, //交换机类型详见以下五种
        boolean durable, //数据持久化?
        boolean autoDelete,//自动删除?当交换机无绑定队列时自动删除?
        boolean internal, //是否内部交换机,是则客户端不能push消息,默认false外部交换机。
        Map arguments //扩展参数
    ) throws IOException;
CustomExchange,DirectExchange,FanoutExchange,HeadersExchange,TopicExchange

 五种使用教程可以参考 https://www.jianshu.com/p/7e574d4946e8

今天码到这。。。。

你可能感兴趣的:(java,SpringCloud和中间件)