redis publi sh сообщение в очередь nchan - PullRequest
0 голосов
/ 16 января 2020

Предположим, у нас есть простая nginx конфигурация для nchan pub / sub:

upstream redis_upstream {
    nchan_redis_server "redis://redis";
}


server {
    listen 80;
    listen [::]:80;

    root /var/www/html;

    index index.html index.htm index.nginx-debian.html;

    server_name localhost;

    nchan_storage_engine "redis";
    nchan_message_buffer_length 100;
    nchan_message_timeout 5m;

    location = /sub {
        nchan_subscriber;
        nchan_channel_id $arg_campaignId;
        nchan_redis_pass redis_upstream;
        nchan_use_redis on;
    }

    location = /pub {
        nchan_publisher;
        nchan_channel_id $arg_campaignId;
        nchan_redis_pass redis_upstream;
        nchan_use_redis on;
    }

    location / {
        try_files $uri $uri/ =404;
    }

}

Эта конфигурация работает хорошо, но она не подходит моему проекту. У меня есть сообщение publi sh logi c в приложении nodejs, поэтому звоните nginx каждый раз, когда мне нужно отправить сообщение sh подписчикам, что крайне неудобно. Однако есть способ опубликовать sh сообщения с помощью команды PUBLISH redis, но nchan использует пакет сообщений, и я застрял, чтобы угадать правильный формат сообщения. На данный момент у меня есть этот код ("msgpack5": "^ 4.2.1"):

publish(campaignId: number, quest: string) {
    const channelId = `{channel:/${campaignId}}:pubsub`;
    const now = String(new Date().getTime()).slice(0, 10);
    const msg = [
      'ch+msg',
      `${campaignId}`,
      300, // ttl
      Number(now),
      0, // tag
      0, // prev_time
      0, // prev_tag
      quest,
      'application/json',
    ];
    const encoded = this.msgpack.encode(msg);
    return this.redis.publishBuffer(channelId, encoded.slice());
}

Nginx регистрируется после выполнения кода выше

2020/01/16 09:09:04 [error] 7#7: REDISTORE: msgpack parsing error: Error reading type marker
2020/01/16 09:09:04 [error] 7#7: REDISTORE: thought there'd be a channel id around for msg

Related github проблема

версия Nchan из пакета nginx -extras (1.14.0-0ubuntu1.7) ubuntu 18.04

...