Project Moscato Team Messaging Middleware Implemetation Message Middleware by Golang Operate as Secure, Effectively
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

queue.go 988B

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. }