91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

go.cqrs中EventHandler的作用是什么

發布時間:2021-06-22 16:34:18 來源:億速云 閱讀:188 作者:Leah 欄目:編程語言

本篇文章為大家展示了go.cqrs中EventHandler的作用是什么,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

EventHandler

type EventHandler interface {
	Handle(EventMessage)
}

EventHandler定義了Handle方法

EventMessage

// EventMessage is the interface that a command must implement.
type EventMessage interface {

	// AggregateID returns the ID of the Aggregate that the event relates to
	AggregateID() string

	// GetHeaders returns the key value collection of headers for the event.
	//
	// Headers are metadata about the event that do not form part of the
	// actual event but are still required to be persisted alongside the event.
	GetHeaders() map[string]interface{}

	// SetHeader sets the value of the header specified by the key
	SetHeader(string, interface{})

	// Returns the actual event which is the payload of the event message.
	Event() interface{}

	// EventType returns a string descriptor of the command name
	EventType() string

	// Version returns the version of the event
	Version() *int
}

EventMessage接口定義了AggregateID、GetHeaders、SetHeader、Event、EventType、Version方法

EventDescriptor

// EventDescriptor is an implementation of the event message interface.
type EventDescriptor struct {
	id      string
	event   interface{}
	headers map[string]interface{}
	version *int
}

// NewEventMessage returns a new event descriptor
func NewEventMessage(aggregateID string, event interface{}, version *int) *EventDescriptor {
	return &EventDescriptor{
		id:      aggregateID,
		event:   event,
		headers: make(map[string]interface{}),
		version: version,
	}
}

// EventType returns the name of the event type as a string.
func (c *EventDescriptor) EventType() string {
	return typeOf(c.event)
}

// AggregateID returns the ID of the Aggregate that the event relates to.
func (c *EventDescriptor) AggregateID() string {
	return c.id
}

// GetHeaders returns the headers for the event.
func (c *EventDescriptor) GetHeaders() map[string]interface{} {
	return c.headers
}

// SetHeader sets the value of the header specified by the key
func (c *EventDescriptor) SetHeader(key string, value interface{}) {
	c.headers[key] = value
}

// Event the event payload of the event message
func (c *EventDescriptor) Event() interface{} {
	return c.event
}

// Version returns the version of the event
func (c *EventDescriptor) Version() *int {
	return c.version
}

EventDescriptor定義了id、event、headers、version屬性,它實現了EventMessage接口

PublishEvent

// PublishEvent publishes events to all registered event handlers
func (b *InternalEventBus) PublishEvent(event EventMessage) {
	if handlers, ok := b.eventHandlers[event.EventType()]; ok {
		for handler := range handlers {
			handler.Handle(event)
		}
	}
}

InternalEventBus的PublishEvent方法會遍歷指定event.EventType()的handlers,挨個執行handler.Handle(event)方法

小結

go.cqrs的EventHandler定義了Handle方法;InternalEventBus的PublishEvent方法會遍歷指定event.EventType()的handlers,挨個執行handler.Handle(event)方法。

上述內容就是go.cqrs中EventHandler的作用是什么,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹江口市| 黄龙县| 茌平县| 通州市| 忻州市| 诸城市| 汕头市| 湘潭市| 抚松县| 伊吾县| 古蔺县| 吴江市| 富顺县| 九江县| 措勤县| 莱阳市| 壤塘县| 永泰县| 北碚区| 阳高县| 汶上县| 通海县| 舟曲县| 呼伦贝尔市| 赤峰市| 瓦房店市| 宜章县| 勐海县| 澄江县| 云龙县| 肥乡县| 大名县| 灵丘县| 日土县| 江油市| 冷水江市| 巩义市| 元氏县| 康乐县| 娄底市| 土默特右旗|