پیام
پیام یکی از بخشهای اصلی Watermill است. پیامها توسط "منتشرکنندگان" منتشر شده و توسط "مشترکگرها" دریافت میشوند. هنگام پردازش پیامها، اگر پردازش ناموفق باشد، باید Ack()
(نشان دادن پردازش موفق) یا Nack()
(نشان دادن عدم موفقیت در پردازش) ارسال کنید.
Ack
و Nack
پیام توسط مشترکگرها در دسترس هستند (در پیادهسازی پیشفرض، مشترکگرها منتظر Ack
یا Nack
میمانند).
کد منبع کامل: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
type Message struct {
// UUID شناسه یکتای پیام است.
//
// برای اشکالزدایی توسط Watermill استفاده میشود.
// UUID ممکن است خالی باشد.
UUID string
// Metadata شامل فاکتورهای پیام است.
//
// میتوان از آن برای ذخیره دادههایی که نیازی به رمزگشایی از تمام بار مفید نیست استفاده کرد.
// نزدیک به هدرهای درخواست HTTP است.
//
// متادیتا میشود marshal و در PubSub ذخیره میشود.
Metadata Metadata
// بار مفید پیام است.
Payload Payload
// ack دریافت پردازش موفقیتآمیز بسته میشود.
// noAck دریافت عدم موفقیت در پردازش بسته میشود.
ack chan struct{}
noAck chan struct{}
ackMutex sync.Mutex
ackSentType ackType
ctx context.Context
}
// ...
Ack
ارسال Ack
کد منبع کامل: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Ack برای پیام یک اظهارنامه ارسال میکند.
//
// Ack مسدود نمیکند.
// Ack شناختهشده است.
// اگر Nack قبلاً ارسال شده باشد، false برمیگرداند.
func (m *Message) Ack() bool {
// ...
Nack
کد منبع کامل: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Nack یک اظهارنامه منفی برای پیام ارسال میکند.
//
// Nack مسدود نمیکند.
// Nack شناختهشده است.
// اگر Ack قبلاً ارسال شده باشد، false برمیگرداند.
func (m *Message) Nack() bool {
// ...
دریافت Ack/Nack
کد منبع کامل: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go
// ...
انتخاب کنید {
case
Context
پیامها حاوی context کتابخانه استاندارد همانند یک درخواست HTTP میباشند.
کد منبع کامل: github.com/ThreeDotsLabs/watermill/message/message.go
// ...
// Context مفاد پیام را برمیگرداند. برای تغییر مفاد، از SetContext استفاده کنید.
//
// Context بازمیگرداند همیشه غیر-نیل است؛ پیشفرض context زیرزمینی است.
func (m *Message) Context() context.Context {
if m.ctx != nil {
return m.ctx
}
return context.Background()
}
// SetContext context ارائهشده را به عنوان context پیام تنظیم میکند.
func (m *Message) SetContext(ctx context.Context) {
m.ctx = ctx
}
// ...