Technical note playframework_documentation_working with play - java_vn
Lập trình background job bằng azurequeue và webjob sử dụng azure storage emulator
1. Lập trình background job bằng
Azure Queue và WebJob trên
Azure Storage Emulator
Nhu cầu: developer tham gia dự án sử dụng Azure mong muốn lập trình và
chạy queue, webjob dưới localhost mà không cần phải đăng ký sử dụng azure
Giải pháp: sử dụng Azure storage emulator
Chung Vĩnh Khang
chungvinhkhang@live.com
3. Demo
• Tạo 1 solution bao gồm:
1 web app (asp.net)
1 web job
• Start emulator
• Cấu hình config: connection là “UseDevelopmentStorage=true;”
4. Lập trình phần web push message xuống queue
• Giả sử tên queue là myqueue (azure queue không cho viết hoa)
• Implement 1 button, khi người dùng submit POST thì web thì push
xuống queue 1 message từ input. Mình làm bằng webpage cho đơn
giản, mọi người có thể áp dụng qua mvc, web api, signalr,…
• Install azure storage library (7+):
Install-Package WindowsAzure.Storage
• Test trên web. Kết quả có thể kiểm tra bằng cách vào Cloud Explorer
5. Lập trình phần job trigger khi queue có message
• Mặc định khi tạo project webjob thì
Microsoft.Azure.WebJobs 1.0.1.0 sẽ được add vào. Và
trước giờ thư viện này không support trigger từ
blob/queue dưới emulator vì 1 số lí do kĩ thuật. Tuy nhiên
mới đây team azurewebjob sdk đã giải quyết. Và hiện tại
chưa chính thức:
• Muốn add thư viện đó, ta cần add them package source
vào nugget. Rồi install thư viện webjobs 2.0.0 alpha
• Có thể test bằng cách ghi ra console:
Kết quả
public static void ProcessQueueMessage([QueueTrigger("myqueue")] string message, TextWriter log
) {
Console.WriteLine(message);
}
6. Bây giờ có thể mở web và console lên test cùng 1 lúc
• Tips: để trigger nhanh hơn thì có thể set thời gian trong cấu hình JobHost:
• Best Practice thực tế:
Không pass cả object lớn vào queue mà lưu xuống memory cache như redis hay db, chỉ pass id hoặc guid xuống queue. Job khi trigger sẽ query
object theo id đó.
Phải kiểm tra webconfig xem có phải connection đang trỏ đến queue emulator hay development queue chưa mới test. Tránh để tình trạng 1
queue mà 2 job giống nhau subscribe và xử lý. Nguy hiểm nhất là subscribe vào cái production queue
• 1 số ứng dụng thực tế:
Bulk mail, mass notification, đồng bộ, backup/archive, etl, media processing, webhook, report, purge, batch import
• 1 số công nghệ kết hợp / thay thế:
Queue/Messaging: Amqp (rabbitmq, rocketmq, cloudamqp), azure service bus, msmq
Job: Quartz .NET, windows background service, azure worker role
Cache: Redis, memcache, ncache, azureblob, appfabric
Lib: Nservicebus, hangfire, servicestack
-HẾT-