REDISパブ/サブノードを使用します.js


パブ/サブは、パブリッシャーが特定の受信機にメッセージ(ペイロード)を送るようプログラムされていないパターンです.これらのメッセージは発行者によって特定のチャンネルに送られます、そして、受信機はそれらの同じメッセージを消費するために一つ以上のチャンネルを購読することができます.
あなたがモノリシックバックエンドを持っていると想像してください、しかし、あなたは電子メールを送ることのようなそのバックエンドに新しい機能を加えたいです.このバックエンドの代わりにメールを送信する責任がある場合は、メールを送信するための責任を負う別のバックエンド(受信機)によって消費されるチャネルにメールを送信する発行元にすることができます.
このプロセスの実装は非常に簡単です、そして、今日の例では、それが我々の要求のボディーを受けて、レシーバーとconsole.log() それです.
今日使用したフレームワークはtinyhttp , Expressに似たAPIで、私はこのフレームワークを使用する特定の理由を持っていません、そして、例コードは簡単に他のフレームワークに複製されます.
TinnyHTTPフレームワークは、すでに統合されたボディパーサーが付属していないので、インストールしますmilliparsec , 有名なボディパーサーよりも軽量であることに加えて、それは非同期と高速です.
今日使用するレッシスクライアントはioredis , APIは直感的なので、非常に堅牢で良いパフォーマンスです.

コードしましょう
あなたが既に理解しているかもしれないように、我々は2つのバックエンドを持つつもりです.バックエンドの一つは、私たちのAPIとなるパブを呼び出します.他のバックエンドはサブであるでしょう.そして、それは我々のレシーバーです.
パブ依存関係をインストールすることから始めましょう.
npm i @tinyhttp/app milliparsec ioredis
簡単なAPIを作りましょう.
// @/pub/index.js

import { App } from "@tinyhttp/app";
import { json } from "milliparsec";

const app = new App();

app.use(json());

app.get("/", (req, res) => {
  return res.json({ msg: "I hope this runs 😅" });
});

app.listen(3000);
今私たちのプロジェクトにioredisをインポートすることができますし、クライアントを作成しましょう.
// @/pub/index.js

import { App } from "@tinyhttp/app";
import { json } from "milliparsec";
import Redis from "ioredis";

const app = new App();
const redis = new Redis();

app.use(json());

app.get("/", (req, res) => {
  return res.json({ msg: "I hope this runs 😅" });
});

app.listen(3000);
今私たちのエンドポイントでは、私たちは、我々はredis.pubish() メソッド.このメソッドは2つの引数をとります.最初に、メッセージを送信したいチャネルの名前と2番目のメッセージが同じメッセージです.
そして、私が加えたいもう一つのことは、この場合、メッセージペイロードがJSONオブジェクトであるということです、しかし、メッセージはストリングでなければなりません.それで、我々は我々のJSONをストリングに変えなければなりません.
これに加えて、我々はGETからPOSTへの我々の終点のHTTP動詞を変えます.
// @/pub/index.js

import { App } from "@tinyhttp/app";
import { json } from "milliparsec";
import Redis from "ioredis";

const app = new App();
const redis = new Redis();

app.use(json());

app.post("/", (req, res) => {
  redis.publish("send-user-data", JSON.stringify({ ...req.body }));
  return res.sendStatus(200);
});

app.listen(3000);
これで私たちのパブが完成しました.
まず、以下の依存関係をインストールしましょう.
npm i ioredis
まず、バックエンドを実行し続ける機能を作りましょう.
// @/sub/index.js

const main = () => {
  console.log("I hope it runs 😅")
};

main();
今私たちのプロジェクトにioredisをインポートすることができますし、クライアントを作成しましょう.
// @/sub/index.js

import Redis from "ioredis";

const redis = new Redis();

const main = () => {
  console.log("I hope it runs 😅")
};

main();
我々が現在我々のサブに取り組んでいるように、我々は我々のレシーバーに取り組んでいます.この方法で、私たちはredis.subscrive() メソッド.この例では2つの引数しか持っていません.最初のものは購読したいチャンネル、2番目はコールバックです.
コールバックは2つの引き数を含み、最初はエラーで、2番目はカウントです.カウントは、我々の加入者がどれくらいのチャンネルを購読するかについてわかっています.
// @/sub/index.js

import Redis from "ioredis";

const redis = new Redis();

const main = () => {
  redis.subscribe("send-user-data", (err, count) => {
    // ...
  });

  // ...
};

main();
エラーが発生した場合は、そのエラーをログに記録しますが、このエラーが発生しない場合は、加入者が購読しているチャネル数をログに記録します.
// @/sub/index.js

import Redis from "ioredis";

const redis = new Redis();

const main = () => {
  redis.subscribe("send-user-data", (err, count) => {
    if (err) console.error(err.message);
    console.log(`Subscribed to ${count} channels.`);
  });

  // ...
};

main();
今、我々はちょうどチャンネル待ち行列に入るメッセージを意識するためにリスナーをつくる必要があります.そのためにはredis.on() つの引数を受け取るメソッドは、最初にイベント名となります.この場合、メッセージは2番目の引数がコールバックです.
コールバックは2つの引き数をとり、最初のメッセージはメッセージから来る.
// @/sub/index.js

import Redis from "ioredis";

const redis = new Redis();

const main = () => {
  redis.subscribe("send-user-data", (err, count) => {
    if (err) console.error(err.message);
    console.log(`Subscribed to ${count} channels.`);
  });

  redis.on("message", (channel, message) => {
    // ...
  });
};

main();
その後、我々はメッセージが来るチャンネルを記録したいです、そして、最終的に、我々は受け取ったメッセージを記録したいです.しかし、我々が受け取るメッセージが文字列であることに注意しなければならないので、我々は変換を実行しなければならないJSONオブジェクトを得ることができます.このように:
// @/sub/index.js

import Redis from "ioredis";

const redis = new Redis();

const main = () => {
  redis.subscribe("send-user-data", (err, count) => {
    if (err) console.error(err.message);
    console.log(`Subscribed to ${count} channels.`);
  });

  redis.on("message", (channel, message) => {
    console.log(`Received message from ${channel} channel.`);
    console.log(JSON.parse(message));
  });
};

main();
さて、Postmanに似たツールを使ってAPIをテストするときは、要求体にJSONオブジェクトを必要なプロパティで送ることができます.

次に、端末に似たようなものがあります.


結論
いつものように、あなたはそれが面白いと思います.あなたがこの記事のどんなエラーにでも気づくならば、コメントで彼らに言及してください.🧑🏻‍💻
この動画はお気に入りから削除されています.💪 🤩