Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- type Queue interface {
- AddMessageToQueue(msg QueueMessage)
- }
- type QueueMessage interface {
- ToSQSFormat() ...
- ToAzureFormat() ...
- ...
- }
- type QueueMessage interface {
- Format() []byte
- }
- type SQSFormat struct {
- ID string
- Payload string
- At time.Time
- }
- func (s SQSFormat) Format() []byte {
- return []byte(fmt.Sprintf("%+v", s))
- }
- type AzureFormat struct {
- Channel string
- Payload string
- }
- func (a AzureFormat) Format() []byte {
- return []byte(fmt.Sprintf("%+v", a))
- }
- type Queue interface {
- AddMessageToQueue(msg QueueMessage)
- ProcessMessages()
- }
- type MessageQueue struct{
- Messages []QueueMessage
- }
- func (m *MessageQueue) AddMessageToQueue(msg QueueMessage) {
- if m.Messages == nil {
- m.Messages = []QueueMessage{}
- }
- m.Messages = append(m.Messages, msg)
- }
- func (m *MessageQueue) ProcessMessages() {
- for _, msg := range m.Messages {
- fmt.Println(string(msg.Format())) // <- will print the formatted message based on the concrete type specified
- }
- }
- func main() {
- var mq Queue = &MessageQueue{}
- var SQSMsg = SQSFormat{
- ID: "id",
- Payload: "something happened",
- At: time.Now(),
- }
- mq.AddMessageToQueue(SQSMsg)
- var azureMsg = AzureFormat{
- Channel: "channel",
- Payload: "something happened",
- }
- mq.AddMessageToQueue(azureMsg)
- mq.ProcessMessages()
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement