বার্তা

বার্তা Watermill এর মৌলিক অংশ গুলোর মধ্যে একটি। বার্তা গুলি "প্রকাশক" দ্বারা প্রকাশিত এবং "গ্রহণকারী" দ্বারা গ্রহণ করা হয়। বার্তা প্রসেস করা হলে, প্রসেসিং ব্যর্থ হলে, আপনাকে Ack() (সফল প্রসেসিং নির্দিষ্ট করা) বা Nack() (প্রসেসিং ব্যর্থ নির্দিষ্ট করা) পাঠাতে হবে।

বার্তা এর Ack এবং Nack টি গ্রহণকারীরা হ্যান্ডেল করে (ডিফল্ট ইমপ্লিমেন্টেশনে, গ্রহণকারীরা Ack বা Nack এর জন্য অপেক্ষা করবে)।

পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
type Message struct {
	// UUID হল বার্তার অনন্য অভিজ্ঞতা।
	//
	// এটা Watermill দ্বারা ডিবাগিং এর জন্য ব্যবহৃত হয়।
	// UUID ফাঁকা হতে পারে।
	UUID string

	// Metadata বার্তার মেটাডেটা বিশেষজ্ঞসুলভ থাকে।
	//
	// পূর্ণ পেলোড থেকে ডিকোড করার প্রয়োজন নেই ডেটা সংরক্ষণ করতে ব্যবহৃত হতে পারে।
	// এটা HTTP অনুরোধ হেডার এর মতো।
	//
	// মেটাডেটা মার্শাল করা এবং PubSub এ সংরক্ষণ করা হয়।
	Metadata Metadata

	// Payload হল বার্তার পেলোড।
	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 এটি পাঠানো হয়েছে তা দেখায় না।
func (m *Message) Ack() bool {
// ...

Nack

পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Nack একটি বার্তার জন্য একটি নেতিবাচক নিশ্চিতকরণ প্রেরণ করে।
//
// Nack ব্লক নয়।
// Nack আইডেমপোটেন্ট।
// Ack এটি পাঠানো হয়েছে তা দেখায় না।
func (m *Message) Nack() bool {
// ...

Ack/Nack গ্রহণ

পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/docs/content/docs/message/receiving-ack.go

// ...
select {
case 

প্রসঙ্গ

বার্তা গুলির সাধারণ লাইব্রেরির প্রসঙ্গ থাকে, ঠিক যেমন একটি HTTP অনুরোধের মতো।

পূর্ণ সোর্স কোড: github.com/ThreeDotsLabs/watermill/message/message.go

// ...
// Context মেসেজের সংদেশ দেয়া হয়, ঠিক যেমন HTTP অনুরোধ।
//
// কন্টেক্সট পরিবর্তন করার জন্য, SetContext ব্যবহার করুন।
//
// প্রদান করা হয়েছে স্বয়ংক্রিয় পদক্ষেপের লিপ্তা; ডিফল্ট হল পৃষ্ঠপোটের প্রসঙ্গ।
func (m *Message) Context() context.Context {
	if m.ctx != nil {
		return m.ctx
	}
	return context.Background()
}

// SetContext প্রদানকৃত প্রসঙ্গকে বার্তার সংদেশের প্রসঙ্গ হিসাবে সেট করে।
func (m *Message) SetContext(ctx context.Context) {
	m.ctx = ctx
}
// ...