Hướng dẫn pub/sub nodejs - pub / sub nodejs

Trong khi xây dựng các ứng dụng ngày nay, các nhà phát triển thường được đáp ứng với nhu cầu tách rời các hệ thống và tách chúng thành các thành phần. Tuy nhiên, với các ứng dụng được tích hợp vào các thành phần khác nhau, mỗi thành phần không thể giao tiếp hoặc hiểu cách các thành phần khác hoạt động.

Nội phân chính

  • Hiểu mô hình quán rượu/phụ
  • Sử dụng Redis
  • Sử dụng Redis cho Pub/Sub
  • Thiết lập Redis cho Pub/Sub
  • Nhiều bài viết tuyệt vời hơn từ Logrocket:
  • Thực hiện xuất bản tại Node.js với Redis
  • Thực hiện Đăng ký trong Node.js với Redis
  • Lựa chọn thay thế cho việc sử dụng redis
  • Apache Kafka
  • Google Cloud Pub/Sub
  • Tin nhắn đám mây Firebase
  • Sự kết luận

Nội phân chính

  • Hiểu mô hình quán rượu/phụ
  • Sử dụng Redis
  • Sử dụng Redis cho Pub/Sub
  • Thiết lập Redis cho Pub/Sub
  • Nhiều bài viết tuyệt vời hơn từ Logrocket:
  • Thực hiện xuất bản tại Node.js với Redis
  • Thực hiện Đăng ký trong Node.js với Redis
  • Lựa chọn thay thế cho việc sử dụng redis
  • Apache Kafka
  • Google Cloud Pub/Sub
  • Tin nhắn đám mây Firebase

Sự kết luận

Giao tiếp duy nhất giữa chúng có thể cung cấp thông tin và thông tin này là bằng cách sử dụng mẫu xuất bản/đăng ký (PUB/SUB).

  • Hiểu mô hình quán rượu/phụ
  • Sử dụng Redis
  • Sử dụng Redis cho Pub/Sub
  • Thiết lập Redis cho Pub/Sub
  • Thực hiện xuất bản tại Node.js với Redis
  • Thực hiện Đăng ký trong Node.js với Redis
  • Lựa chọn thay thế cho việc sử dụng redis

Apache Kafka

  • Node.js
  • Google Cloud Pub/Sub
  • Tin nhắn đám mây Firebase

Hiểu mô hình quán rượu/phụ

Sự kết luận

Giao tiếp duy nhất giữa chúng có thể cung cấp thông tin và thông tin này là bằng cách sử dụng mẫu xuất bản/đăng ký (PUB/SUB).

Trong bài viết này, chúng tôi sẽ xem xét mẫu xuất bản/đăng ký, cách thiết lập nó trong ứng dụng Node.js, cách thực hiện mẫu và hiểu các lựa chọn thay thế cho việc sử dụng Redis. Điều này bao gồm:

Trước khi chúng tôi làm điều này, điều quan trọng là phải hiểu đầy đủ mẫu trước khi đi vào sự không sử dụng nó trong Node.js. Ngoài ra, đảm bảo bạn đã cài đặt các phần sau:

Sử dụng Redis

Redis

Redis Client cho Node.js

Sử dụng Redis cho Pub/Sub

Pub/Sub là một mẫu nhắn tin trong đó các thành phần khác nhau xuất bản và đăng ký lẫn nhau để thông báo và gửi dữ liệu cho nhau.

Nó cũng cho phép phân tách các thành phần và mỗi thành phần dựa trên một nhà môi giới tin nhắn. Về cơ bản, một nhà xuất bản xuất bản một tin nhắn và thuê bao đăng ký cho nhà xuất bản để nhận tin nhắn từ một nhà môi giới tin nhắn.

Sử dụng mẫu này cung cấp sự phát triển dễ dàng để các nhà phát triển có thể làm việc và lo lắng về thành phần hoặc dịch vụ của họ mà không cần phải hiểu giao diện của các thành phần khác.

Thiết lập Redis cho Pub/Sub

Nhiều bài viết tuyệt vời hơn từ Logrocket:

Thực hiện xuất bản tại Node.js với Redis

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1

Thực hiện Đăng ký trong Node.js với Redis

Lựa chọn thay thế cho việc sử dụng redis


Nhiều bài viết tuyệt vời hơn từ Logrocket:

  • Thực hiện xuất bản tại Node.js với Redis
  • Thực hiện Đăng ký trong Node.js với Redis
  • Lựa chọn thay thế cho việc sử dụng redis
  • Apache Kafka
  • Google Cloud Pub/Sub
  • Tin nhắn đám mây Firebase
  • Sự kết luận

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 

Giao tiếp duy nhất giữa chúng có thể cung cấp thông tin và thông tin này là bằng cách sử dụng mẫu xuất bản/đăng ký (PUB/SUB).

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"

Trong bài viết này, chúng tôi sẽ xem xét mẫu xuất bản/đăng ký, cách thiết lập nó trong ứng dụng Node.js, cách thực hiện mẫu và hiểu các lựa chọn thay thế cho việc sử dụng Redis. Điều này bao gồm:

Trước khi chúng tôi làm điều này, điều quan trọng là phải hiểu đầy đủ mẫu trước khi đi vào sự không sử dụng nó trong Node.js. Ngoài ra, đảm bảo bạn đã cài đặt các phần sau:

Redis

$ mkdir redisNode && cd redisNode

Redis Client cho Node.js

$ mkdir publish subscribe

Tiếp theo, khởi tạo dự án cho thành phần xuất bản:

$ cd publish && npm init -y

Sau đó, khởi tạo dự án cho thành phần xuất bản:

$ cd subscribe && npm init -y

Bây giờ, chúng tôi có hai thành phần riêng biệt với máy chủ của họ, sử dụng một thành viên làm nhà xuất bản và phần còn lại làm thuê bao.

Thực hiện xuất bản tại Node.js với Redis

Trọng tâm của chúng tôi ở đây là triển khai thành phần sẽ xử lý các thông điệp xuất bản đến một kênh cụ thể.

Để sử dụng redis trong node.js, chúng tôi cần cài đặt gói

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
0. Nó phục vụ như một máy khách cho phiên bản Redis trên chính máy của chúng tôi:

$ npm install redis

Bây giờ chúng tôi có thể tạo một tệp

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
1 trong thư mục xuất bản sẽ chứa mã của chúng tôi:

const redis = require('redis');
const publisher = redis.createClient();

(async () => {

  const article = {
    id: '123456',
    name: 'Using Redis Pub/Sub with Node.js',
    blog: 'Logrocket Blog',
  };

  await publisher.connect();

  await publisher.publish('article', JSON.stringify(article));
})();

Trong mã trên, chúng tôi nhập Redis và gọi phương thức

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
2. Bây giờ, chúng tôi muốn xuất bản một đối tượng
Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
6 chứa
Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
4,
Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
5 và
Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
6.

Với đối tượng này, chúng ta có thể gửi nó dưới dạng thông báo đến kênh

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
6:

$ publisher.publish('article', JSON.stringify(article));

Thực hiện Đăng ký trong Node.js với Redis

Vì chúng tôi có một thành phần sẵn sàng để xuất bản một tin nhắn, hãy để Lừa thực hiện một thành phần

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
8 sẽ nhận được các tin nhắn này. Lý tưởng nhất, chúng ta có thể tạo hoặc có nhiều thành phần.

Đầu tiên, đảm bảo cài đặt Redis:

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
0

Tiếp theo, hãy tạo tệp

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
1 trong thư mục
Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
8 của bạn để chứa việc triển khai:

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
1

Để đăng ký, hãy mở thiết bị đầu cuối của bạn và chạy tệp đăng ký,

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> SUBSCRIBE article
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "article"
3) (integer) 1
1) "message"
2) "article"
3) "Pub/Sub"
1 và mong đợi một tin nhắn sau khi bạn xuất bản một tin nhắn:

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
2

Để xuất bản, mở một thiết bị đầu cuối khác và chạy tệp xuất bản.

Ngược lại, nếu bạn muốn triển khai Pub/Sub trên cùng một máy chủ thay vì trên một máy chủ khác, điều quan trọng cần lưu ý là bạn không thể làm như vậy trên cùng một máy khách Redis vì một ứng dụng khách Redis không thể xử lý Pub/Sub; Hai phải có sẵn.

Vì vậy, thay vào đó, bạn phải thêm hai máy khách Redis để trao các chức năng đăng ký và xuất bản:

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
3

Ngoài ra, đừng quên kết nối ứng dụng khách Redis của bạn trong hàm Async:

Vectormikes-MacBook-Pro:Projects macbookpro$ redis-cli
127.0.0.1:6379> PUBLISH article Pub/Sub
(integer) 1
127.0.0.1:6379> 
4

Lựa chọn thay thế cho việc sử dụng redis

Ngoài việc sử dụng redis, chúng tôi còn có các thay thế để redis triển khai mẫu pub/sub, đặc biệt là trong các ứng dụng Node.js. Dưới đây là danh sách các lựa chọn thay thế phổ biến cho Redis.

Apache Kafka

Apache Kafka nhanh hơn rất nhiều so với Redis và được tạo ra để xử lý nhiều dữ liệu hơn Redis. Kafka cũng có xu hướng có thời gian lưu giữ dữ liệu dài.

Thỏ

RabbitMQ là một nhà môi giới tin nhắn chuyên dụng tiên tiến hơn Redis, vì nó được thiết kế để trở thành một nhà môi giới thông điệp cho các mẫu quán rượu/phụ, cung cấp nhiều cấu hình và kịch bản hơn. Redis chỉ là một cửa hàng bộ nhớ, là một cơ sở dữ liệu lý tưởng.

Google Cloud Pub/Sub

Google Cloud Pub/Sub có thể mở rộng hơn nếu không có khả năng mở rộng cao so với Redis. Nhưng, nó ít cấu hình hơn Redis.

Tin nhắn đám mây Firebase

Khi nói đến tin nhắn đám mây Firebase, sự lựa chọn là của bạn, nhưng Firebase cung cấp một mô hình tài liệu chứ không phải là bộ nhớ trong redis.

Sự kết luận

Trong hướng dẫn ngắn này, chúng tôi đã xem xét cách chúng tôi có thể nhanh chóng thiết lập một ứng dụng Node.js để bắt đầu mẫu quán rượu/phụ bằng Redis. Cách tiếp cận này được hướng đến Microservice hoặc kiến ​​trúc được ghép nối lỏng lẻo.