پیام

پیام یکی از بخش‌های اصلی 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
}
// ...