Centrifugo(六)引擎(Engines)

    Centrifugo 引擎负责如何发布消息、处理订阅、状态及历史数据的保存及恢复等。Centrifugo 可选的引擎为 MemoryRedis,默认使用 Memory。两者最大的不同在于,Memory 引擎只支持一个 Centrifugo 节点,而 Redis 引擎支持多节点部署。可以通过配置文件中的 engine 属性来设置 Centrifugo 使用的引擎,也可以在启动命令中通过 engine 参数指定:

    centrifugo --config=config.json --engine=redis

Memory engine

    只支持一个节点,所有信息存储在服务器内存中。

Redis engine

    支持 Centrifugo 在多服务器伸缩部署,使用 Redis 作为消息路由,状态信息及历史数据保存在 Redis 内存数据库中,内部节点之间的通讯通过 Redis 的发布/订阅机制来进行通信。同时,此模式支持 API 命令排队。

    要想使 Centrifugo 支持通过 Redis engine API listener 发布消息,可以在启动时使用 --redis_api 参数:

    centrifugo --config=config.json --engin=redis --redis_api

如此启动后,可以直接通过 Redis 客户端来发布消息,示例代码(Python):

    import redis
    import json

    client = redis.Redis()

    command = {
        "method": "publish",
        "params": {
            "channel": "events",
            "data": {"enent": "message"}
        }
    }

    client.rpush("centrifugo.api", json.dumps(command))

<font color="blue">RPUSH</font> 命令允许在一个请求中将多条消息推入队列。

注意:我们通过 <font color="blue">RPUSH</font> 将消息推送到了 centrifugo.api,这是 API 队列的默认名称,Centrifugo 实时对其监控。事实上,在 Redis 中,这是一个列表结构。此处,你推送过来的指令会被 Centrifugo 及时处理,但是并不会给客户端响应。如果需要获取响应,那只能使用 HTTP API

    publish 是最常用的 Centrifugo 指令,Redis_API 的主要目的是降低高频率发布时的 HTTP 开销。同时,也方便各种类型的语言使用 Centrifugo,而不需要依赖 HTTP API client

与 Redis 引擎相关的参数如下:

    --redis_api                  enable Redis API listener (Redis engine)
    --redis_api_num_shards int   Number of shards for redis API queue (Redis engine)
    --redis_db string            redis database (Redis engine) (default "0")
    --redis_host string          redis host (Redis engine) (default "127.0.0.1")
    --redis_master_name string   Name of Redis master Sentinel monitors (Redis engine)
    --redis_password string      redis auth password (Redis engine)
    --redis_pool int             Redis pool size (Redis engine) (default 256)
    --redis_port string          redis port (Redis engine) (default "6379")
    --redis_sentinels string     Comma separated list of Sentinels (Redis engine)
    --redis_url string           redis connection URL in format redis://:password@hostname:port/db (Redis engine)

说明:
    1. 当 --redis_url 参数生效时,--redis_host--redis_port--redis_password--redis_db 参数会被替代掉,不再生效。

    2. --redis_api_num_shards 参数必须与 --redis_api 参数配合使用。它将创建 N 个分片队列。该参数主要用于超高并发的消息发布。通过对 API 队列分片降低单队列的压力,提升消息发布效率。如果 --redis_api_num_shards 配置为 5,则将产生 5 个 API 队列分片:

centrifugo.api.0
centrifugo.api.1
centrifugo.api.2
centrifugo.api.3
centrifugo.api.4

    当使用此参数时,在客户端侧,你必须指定要将消息发布到哪个 API 队列。为了保证频道中消息的顺序,需要注意在客户端中要将消息按顺序推送到同一 API 队列的同一频道中。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包含的重点内容:JAVA基础JVM 知识开源框架知识操作系统多线程TCP 与 HTTP架构设计与分布式算法数据库知...
    消失er阅读 4,395评论 1 10
  • TCP 与 HTTP http1.0 和 http1.1 有什么区别。 HTTP 1.0主要有以下几点变化: 请求...
    冷枫abc阅读 510评论 0 0
  • NOSQL类型简介键值对:会使用到一个哈希表,表中有一个特定的键和一个指针指向特定的数据,如redis,volde...
    MicoCube阅读 4,091评论 2 27
  • 如果我老了 如果我老了 我便会回到这里 坐在你温热的炕头 把香烟扔掉,叭叭吸你的烟锅 唠叨小时候一块偷...
    学会淡定_c9c0阅读 180评论 0 3
  • 莫言曾说过,“教育的本质就是一棵树摇动另一棵树,一朵云推动另一朵云,一个灵魂唤醒另一个灵魂。”父母或者哥哥姐姐优秀...
    一盏热茶阅读 593评论 2 8