Kue nodejs

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách đặt Hàng đợi hoặc xếp hàng trên NodeJ bằng Kue. Queue hay xếp hàng là một thủ thuật rất hữu ích khi các ứng dụng web của chúng ta nhận được rất nhiều yêu cầu. Tại sao sử dụng hàng đợi?

Chưa kể thời gian chờ của một quy trình có thể dẫn đến mất dữ liệu không thể tránh khỏi do máy chủ không thể phục vụ các yêu cầu đến. Rất nhiều giải pháp có thể được sử dụng để triển khai hàng đợi trong hệ thống ứng dụng web của chúng tôi. Chỉ là Kue dễ cài đặt hơn trong Node. js thay vì sử dụng các công nghệ khác như Kafka và RabbitMQ

Yêu cầu

  • Máy tính đã cài đặt nodejs, redis-server, mongodb
  • Kiến thức cơ bản về Javascript

Sự khó khăn

  • Căn bản

Nội dung hướng dẫn

Bây giờ chúng ta sẽ tiến hành cài đặt trước cho một số công cụ cần thiết (bạn nào đã cài đặt rồi thì bỏ qua một số phần cài đặt bên dưới nhé)

$ mkdir node_kue
$ cd node_kue
$ npm install kue
$ npm install mongoose

Sau đó bật máy chủ Redis trong bảng điều khiển đầu tiên

$ redis-server
3227:C 08 Apr 21:27:09.142 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
3227:M 08 Apr 21:27:09.145 * Increased maximum number of open files to 10032 (it was originally set to 4864).
                _._
           _.-``__ ''-._
      _.-``    `.  `_.  ''-._           Redis 3.2.6 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 3227
  `-._    `-._  `-./  _.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |           http://redis.io
  `-._    `-._`-.__.-'_.-'    _.-'
 |`-._`-._    `-.__.-'    _.-'_.-'|
 |    `-._`-._        _.-'_.-'    |
  `-._    `-._`-.__.-'_.-'    _.-'
      `-._    `-.__.-'    _.-'
          `-._        _.-'
              `-.__.-'
3227:M 08 Apr 21:27:09.155 # Server started, Redis version 3.2.6
3227:M 08 Apr 21:27:21.421 * DB loaded from disk: 12.266 seconds
3227:M 08 Apr 21:27:21.421 * The server is now ready to accept connections on port 6379

Sau đó bật mongodb trong bảng điều khiển thứ hai

_______2_______

Bây giờ hãy tạo một tệp có cấu trúc sau (bỏ qua node_modules vì ​​thư mục được tạo tự động)

.
├── app.js
├── models
│   └── activity_log.js
└── worker.js

Tạo mô hình

Ở đây chúng ta sẽ tạo một model để map vào collection trong MongoDB. Chúng tôi sẽ tạo một bộ sưu tập có tên là nhật ký hoạt động nơi chúng tôi có thể lưu trữ các nhật ký hoạt động khác nhau của người dùng đối với trang mà anh ấy đã truy cập. Những ngôi đền là như vậy

Bộ sưu tập bao gồm bốn trường với hai trường bổ sung được tạo_at và cập nhật_at. Vui lòng tạo đoạn mã sau trong tệp models/activity_log. js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var activityLogSchema = new Schema({
  title: { type: String, required: true},
  body: String,
  status: String,
  url: String,
},
{
    timestamps: true
});
var ActivityLog = mongoose.model('ActivityLog', activityLogSchema);
module.exports = ActivityLog;

Mô hình này sẽ được sử dụng trong công nhân. tập tin js

Tạo một nhiệm vụ

Bây giờ chúng ta sẽ viết code xử lý tác vụ với cluster mode. Nơi chúng tôi sẽ sử dụng số lượng CPU thuộc sở hữu của máy chủ. Vui lòng tạo đoạn mã sau trong worker. tập tin js

var kue = require('kue')
    , cluster = require('cluster')
    , jobs = kue.createQueue();
var mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://localhost/node_kue');
var ActivityLog = require('./models/activity_log.js');
var clusterWorkerSize = require('os').cpus().length;
if (cluster.isMaster) {
    // start the UI
    kue.app.listen( 3000 );
    console.log( 'UI started on port 3000' );
    for (var i = 0; i < clusterWorkerSize; i++) {
        cluster.fork();
    }
} else {
    // Consumer / Worker for jobs testing
    jobs.process( 'activity_log', 10, function ( job, done ) {
    console.log( 'Starting ' + job.data.title );
        console.log("Execute activity_log jobs...");
        var activity_log = new ActivityLog({
                        title: job.data.title ,
                        body:job.data.body ,
                        status:job.data.status ,
                        url:job.data.url
                    });
        activity_log.save(function(err) {
            if (err)
            {
                console.log(err);
            }
            else
            {
                setTimeout( function () {
                    console.log( 'Finished activity log jobs: ' + job.data.title );
                    done();
                }, 100 );
            }
        });
    });
    jobs.process( 'testing', 4, function ( job, done ) {
      console.log( 'Starting ' + job.data.title );
      console.log("Execute testing jobs...");
      setTimeout( function () {
        console.log( 'Finished ' + job.data.title );
        done();
      }, 1000 );
    });
}

Trong đoạn mã trên, chúng tôi tạo một đối tượng Kue và khởi tạo cụm. Sau đó nếu cluster là master thì chạy Kue server, ngược lại nếu là con thì tạo instance xử lý task sẽ đến Kue. Vì vậy, nếu có một công việc với đồng thời 10 và số lượng lõi của máy chủ là 4 thì tổng số đồng thời sẽ là 40

Trong đoạn mã trên, có hai công việc. Đó là thử nghiệm công việc với đồng thời 4 chỉ hiển thị thiết bị xuất chuẩn trong bảng điều khiển và có độ trễ 1000 ms. Sau đó là các công việc lưu trữ dữ liệu vào MongoDB. nơi anh ta có 10 đồng thời và độ trễ hơn 100 ms. Tập tin này sẽ được sử dụng trong ứng dụng. js

Bây giờ hãy bật công nhân. js trên các bảng điều khiển khác

$ node worker.js

Tạo mã ứng dụng

Bây giờ chúng ta sẽ tạo mã để sử dụng các công việc được xác định trong worker. js. Việc sử dụng nó đủ đơn giản và không khiến chúng ta ngừng sử dụng nó. Đơn giản chỉ cần gọi tạo () và bỏ qua tên công việc và các tham số của nó

var kue = require('kue')
  , jobs = kue.createQueue();
// Producer for jobs testing
for ( var i = 0; i < 10; i++ ) {
    console.log( 'Creating Job #' + i );
    jobs.create( 'testing', {
      title: 'jobs #' + i
    }).save();
}
for ( var i = 0; i < 100; i++ ) {
    console.log( 'Creating Activity Job #' + i );
    jobs.create( 'activity_log', {
        title: 'visited_item',
        body: 'lorem ipsum sit dolor amet- '+ i,
        status:'200',
        url:'http://www.example.com/item/mouse-imac-1j1h2j4h12'
    }).save();
}

Để chạy mã demo, vui lòng chạy lệnh này trên bảng điều khiển khác

________số 8_______

Nhiệm vụ giám sát trên Kue UI

Để theo dõi, bạn có thể mở tại http. // máy chủ cục bộ. 3000. Ở đó bạn có thể thấy năm tab bao gồm Không hoạt động, Đang hoạt động, Bị trì hoãn, Không thành công, Hoàn thành. Không cần làm mới trang, bạn có thể xem cập nhật trực tiếp vì nó đã sử dụng websocket. Bạn cũng có thể xem kết quả thông qua ứng dụng khách mongo và vui lòng tính toán số tiền xem có phù hợp với những gì được gửi đến công việc hay không

$ mongo
> use node_kue;
> db.activitylogs.find().length();
10000
>

Đang cố gắng thay đổi tham số Kue

Bây giờ chúng tôi cũng muốn thử thay đổi tham số đồng thời của các công việc Activity_logs thành 500 và thực hiện 50000 tác vụ được gửi tới Kue
Bây giờ chúng tôi muốn thử thay đổi tham số đồng thời của các công việc Activity_logs thành 1000 và thực hiện 50000 tác vụ được gửi đến Kue
Trong cả hai trường hợp, nó có xu hướng giống nhau, nhưng chúng ta có thể biết rằng càng đồng thời, tất nhiên, Cake sẽ càng hoạt động nhanh hơn. Nhưng tất nhiên chúng ta phải biết giới hạn tối đa

Sử dụng hàng đợi có thể hữu ích, đặc biệt là Node. js chính nó là một trong những ngôn ngữ lập trình không đồng bộ. Tất nhiên điều này trở thành hai lợi thế lớn khi chúng ta sử dụng Node. js và Kue. Chỉ là chúng ta cần chú ý một số điều khi sử dụng Kue này

Chúng tôi khuyên bạn không nên có mã nặng trong một tác vụ, nếu bạn muốn có một mã nặng thì tốt hơn là chia nhỏ lại để tác vụ khác
Nếu bạn muốn sử dụng chế độ cụm, trước tiên hãy lưu ý số lượng lõi trên máy chủ
Kiểm tra giá trị đồng thời tối đa mà máy chủ có thể xử lý nếu chúng ta không đặt đồng thời quá cao mà Kue không thể thực thi được
Gỡ lỗi trước khi tác vụ Kue được triển khai để Kue không thử lại nhiều thư
Thật không may, hiện tại Kue không có cơ chế mở rộng quy mô nếu một ngày nào đó dung lượng của các máy chủ được cài đặt Kue tăng đột biến trong xử lý tác vụ, một điều khác có thể xảy ra là khi hàng đợi rất lớn và chất đống để quá trình thực hiện hàng đợi mới nhất có thể đợi lâu hơn. Lập kế hoạch năng lực là cần thiết trong trường hợp này. Nếu bạn có một số câu hỏi, xin vui lòng đặt câu hỏi trong phần bình luận bên dưới



Đã đăng trên Không tưởng. io - Trao thưởng cho những người đóng góp mã nguồn mở

#lập trình #nodejs #javascript #task

5 năm trước trong #utopian-io của vanessaayumi (36)

  • Khoản thanh toán trước đây $0. 14, 0. 00 TRX
  • -Tác giả $0. 12, 0. 00 TRX
  • - Người quản lý $0. 02, 0. 00 TRX

  • + iqbalhood
  • + serkorkin
  • + auliausu
  • + anharismail
  • + người theo chủ nghĩa theo chủ nghĩa xã hội chủ nghĩa

Trả lời 1

Kue nodejs

Loại.  

  • [-]

    amosbastian (72)
      

    Đóng góp của bạn không thể được phê duyệt vì nó không tuân theo Quy tắc Utopian và bị coi là đạo văn. Đạo văn không được phép trên Utopian và các bài đăng liên quan đến đạo văn sẽ bị gắn cờ và ẩn vĩnh viễn

    Bạn đã đạo văn hướng dẫn từ http. // quayan. com/menangani-antrian-task-dengan-kue-di-node-js/ (tín dụng cho @knowledges)

    Kue trong Nodejs là gì?

    Kue là hàng đợi công việc ưu tiên giàu tính năng cho nút. js được hỗ trợ bởi redis . Một tính năng chính của Kue là giao diện người dùng rõ ràng để xem và quản lý các công việc đã xếp hàng, đang hoạt động, thất bại và đã hoàn thành.

    BullMQ là gì?

    BullMQ là một Nút. Thư viện js triển khai hệ thống hàng đợi nhanh và mạnh mẽ được xây dựng trên Redis giúp giải quyết nhiều kiến ​​trúc vi dịch vụ thời hiện đại .