bjszg:
    各个地方馆的项目推送资源数据到bjszg
    首先地方馆会到bjszg申请ak,sk. 然后会给各个地方馆创建一个队列,该队列是查询地方馆生产的消息有没有被bjszg消费的。
    各个地方馆把消息推送到MQ的队列(这个队列不是那个给地方馆创建的队列) 是每个地方馆生产消息的队列。bjszg消费MQ里的消息,一个队列一个消费,顺序无关。
    但要保证不重复消费。 这里采用的是。每次消费前去redis查该ak的资源ID(唯一的) 是否存在。存在的话就更改这条资源的数据。然后把ak作为key, 资源ID 是value存到redis.
    消费者消费成功后会存到给地方馆创建的队列里。地方馆消费后更改他们自己表的上报数据的状态。然后每天有一个定时任务,把上报状态是失败的在重发一次。

    rabbitMQ 的高可用性
    镜像集群模式(高可用性)
    这里没有做负载均衡。镜像集群模式够用了

    如果消息没有被消费者接收到:
    开启 confirm 模式,在生产者那里设置开启 confirm 模式之后,你每次写的消息都会分配一个唯一的 id,然后如果写入了 RabbitMQ 中,RabbitMQ 会给你回传一个 ack 消息,告诉你说这个消息 ok 了。如果 RabbitMQ 没能处理这个消息,会回调你的一个 nack 接口,告诉你这个消息接收失败

    设置持久化有两个步骤:
    创建 queue 的时候将其设置为持久化
    这样就可以保证 RabbitMQ 持久化 queue 的元数据,但是它是不会持久化 queue 里的数据的。
    第二个是发送消息的时候将消息的 deliveryMode 设置为 2
    就是将消息设置为持久化的,此时 RabbitMQ 就会将消息持久化到磁盘上去。

    RabbitMQ使用什么方式传输:
    RabbitMQ使用信道的方式来传输数据。信道是建立在真实的TCP连接内的虚拟连接,且每条TCP连接上的信道数量没有限制。