rabbitmq

我们这边用的是私有化部署的rabbitmq
文档指路:https://www.rabbitmq.com/getstarted.html

比较传统的消息中间件:

  • 处理和响应消息的方式是destructive的,一旦消息被成功处理,就会从broker上删除

rabbitmq服务器上查看

1
2
3
whereis rabbitmq
rabbitmq-plugins list
rabbitmqctl list_users

web 管理端

  • admin-Users 配置对应的user - Can access virtual hosts

nacos 对rabbitmq的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
rabbitmq:
host: ${rabbitmq.host}
port: ${rabbitmq.port}
username: ${rabbitmq.username}
password: ${rabbitmq.password}
virtual-host: homework
listener:
direct:
acknowledge-mode: auto
retry:
enabled: true
max-attempts: 5
initial-interval: 2000
simple:
retry:
enabled: true
max-attempts: 4
initial-interval: 2000
prefetch: 1
acknowledge-mode: auto

自己的消息中心也集成到了内部管理端

集成RabbitMQ统一发送接收方案

项目团队使用情况

  • java团队
    • 利用rabbitmq提供相关离线操作,及高并发削峰
    • skywalking - skywalking/agent/config/apm-trace-ignore-plugin.config + trace.ignore_path=RabbitMQ/**

Kafka

Java团队也用这个

  • Partition(分区)

    rocketmq

    之前被推过一个内部的微服务开发框架,用的是rocketMQ
    文档指路:http://rocketmq.apache.org/docs/quick-start/
  • 每个Topic包含多个队列,通过多个队列来实现多实例并行生产和消费
  • Subscriber-Consumer Group

基于异步消息提升性能

wiki指路

https://zh.wikipedia.org/wiki/%E6%B6%88%E6%81%AF%E9%98%9F%E5%88%97

名词解释-设计/演进

主题

队列模型

  • Queue(FIFO-Linear List,具体实现-链表or数组)

  • Producer-Consumer

    发布-订阅模型(publish-subscribe pattern)

  • Publisher-Subscriber

  • Topic(服务器存放消息的容器)

  • RabbitMQ用的是队列模型,但是可以实现发布订阅功能(解决了多个消费者的问题-Exchange模块)

  • RocketMQ和Kafka用是发布-订阅模型(业务模型比较像,但是具体实现不一样)