Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package modules
  2. import "errors"
  3. type MsgQueue struct {
  4. queue chan Message
  5. QueueFunc QueueOperate
  6. }
  7. type QueueOperate interface {
  8. //queue 초기화
  9. queue_init() error
  10. //queue push
  11. push(msg Message) bool
  12. //pop message (wait -> busy waiting 여부 결정)
  13. pop(wait bool) (Message, error)
  14. }
  15. func (mq *MsgQueue) queue_init() error {
  16. if mq.queue != nil && len(mq.queue) != 0 {
  17. return errors.New("Queue Hadlerer Error: Already initialized.")
  18. } else if mq.queue == nil {
  19. mq.queue = make(chan Message)
  20. return nil
  21. } else {
  22. close(mq.queue)
  23. mq.queue = make(chan Message)
  24. return nil
  25. }
  26. }
  27. func (mq *MsgQueue) push(msg Message) bool {
  28. mq.queue <- msg
  29. return true
  30. }
  31. func (mq *MsgQueue) pop(wait bool) (Message, error) {
  32. if wait == true {
  33. if len(mq.queue) == 0 {
  34. return Message{}, errors.New("Queue Handler Alert: Queue is Empty")
  35. } else {
  36. return <-mq.queue, nil
  37. }
  38. } else {
  39. //queue에 데이터가 들어올 때까지 block
  40. return <-mq.queue, nil
  41. }
  42. }