2015-03-07 16 views
5

Tôi có hai trường hợp differents để xử lý 2 loại hàng đợi khác nhau bằng cách sử dụng bộ nhớ hàng đợi Azure.Định cấu hình QueueTrigger trên mỗi hàng đợi bằng cách sử dụng lưu trữ hàng đợi Azure

Tôi muốn đặt một hàng đợi để chạy cái khác và cái còn lại để chạy cùng một lúc.

Tôi đã nhìn vào tài liệu hướng dẫn và tôi có thể áp dụng các cấu hình để các máy chủ làm ảnh hưởng đến toàn bộ phạm vi của hàng đợi.

static void Main(string[] args) 
    { 
     JobHostConfiguration config = new JobHostConfiguration(); 
     config.Queues.BatchSize = 8; 
     config.Queues.MaxDequeueCount = 4; 
     config.Queues.MaxPollingInterval = TimeSpan.FromSeconds(15); 
     JobHost host = new JobHost(config); 
     host.RunAndBlock(); 
    } 

để tôi có thể định cấu hình các trường hợp đó bằng cách sử dụng một tài khoản lưu trữ azure duy nhất?

Trả lời

1

Từ câu hỏi của bạn, tôi hiểu bạn có 2 hàng đợi và mỗi hàng đợi cần phải được sử dụng để xử lý các nhiệm vụ khác nhau/công việc.

Bạn có thể làm theo các cách tiếp cận

1) Triển khai 2 việc làm Web, mỗi đợi vào hàng đợi khác nhau và kích hoạt công việc tương ứng với bất cứ khi nào một thông báo xuất hiện trên hàng đợi tương ứng. Mã cấu hình bạn đã đề cập ở trên đặt cơ sở cho một công việc. Và AFAIK, một công việc có thể chờ đợi trên một hàng đợi. Bạn có thể có một phương pháp như thế này bên cạnh Main() phương pháp

public static void ProcessQueueMessage([QueueTrigger("logqueue")] string logMessage) 
{ 
    //do something 
} 

2) nếu bạn muốn kích hoạt nhiều kịch bản dựa trên các tin nhắn từ một hàng đợi, bạn có thể có một nếu khối khác trên phương pháp ProcessQueueMessage hoặc nếu bạn muốn làm cho nó dễ quản lý hơn, sử dụng mẫu Chiến lược để thực hiện đúng phương thức từ ProcessQueueMessage

Nếu bạn làm theo # 1 ở trên, bạn sẽ triển khai các công việc web khác nhau cho mỗi công việc/kịch bản. Nếu bạn làm theo số 2 ở trên, bạn sẽ triển khai một công việc trên web và những gì mỗi thư được thực hiện sẽ được quyết định trong khi xử lý thư.

Documentation liên quan đến chờ đợi vào hàng đợi here.

[Cập nhật]

Như chúng ta đã biết một công việc web thể chờ đợi trên chỉ có một hàng đợi, chờ đợi vào hàng đợi không phải là cách tiếp cận đúng trong trường hợp này. Tốt hơn kích hoạt công việc web định kỳ (nói một lần trong 5 phút). Logic để dequeue tin nhắn từ nhiều hàng đợi và xử lý chúng sẽ là một phần của một công việc web. Xử lý mỗi hàng đợi có thể là một phương thức được gọi bởi công việc cùng một trang web (cái khác hoặc đồng thời sử dụng Task). Bạn có thể chuyển số tin nhắn trên CloudQueue.GetMessages cho mỗi hàng đợi. Nó sẽ rất giống với dịch vụ windows. Chỉ cần phần kích hoạt được thực hiện bởi công việc web và nó chạy như một công việc web chứ không phải là dịch vụ cửa sổ. Dưới đây là một mã giả thô:

main() 
{ 
    // initialize webjob 
} 
public static MyWebJobMethod(...) 
{ 
    Task a =() => {//process queue 1}; 
    Task b =() => {//process queue 2} 
    Task.WaitAll(a,b); 
} 
+0

cảm ơn câu trả lời của bạn, tôi không có tùy chọn để triển khai nhiều công việc trên web, thực ra tôi đang chạy dịch vụ cửa sổ Điều đó làm cho vai trò của công việc web hoàn toàn ổn, vấn đề là làm thế nào tôi có thể đặt "Số lượng tin nhắn xếp hàng tối đa được chọn đồng thời", mỗi hàng đợi giả sử một trình kích hoạt sẽ kích hoạt một lúc và có thể có cấu hình mặc định. –

+0

http://azure.microsoft.com/en-us/documentation/articles/websites-dotnet-webjobs-sdk-storage-queues-how-to/#config –

+0

cập nhật câu trả lời của tôi ... – Amit

Các vấn đề liên quan