暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

queue_functions.go 2.2KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. package functions
  2. import (
  3. "time"
  4. "git.x2erp.com/qdy/go-base/ctx"
  5. "git.x2erp.com/qdy/go-base/types"
  6. "git.x2erp.com/qdy/go-db/factory/rabbitmq"
  7. )
  8. // CreateQueue 创建队列
  9. func CreateQueue(rabbitFactory *rabbitmq.RabbitMQFactory, req types.QueueRequest, reqCtx *ctx.RequestContext) *types.QueryResult {
  10. // 设置默认值
  11. if req.ChannelName == "" {
  12. req.ChannelName = "default"
  13. }
  14. // 确保通道存在
  15. _, err := rabbitFactory.CreateChannel(req.ChannelName)
  16. if err != nil {
  17. return &types.QueryResult{
  18. Success: false,
  19. Error: "Failed to create channel: " + err.Error(),
  20. Time: time.Now().Format(time.RFC3339),
  21. }
  22. }
  23. // 创建队列
  24. err = rabbitFactory.AddQueue(
  25. req.ChannelName,
  26. req.QueueName,
  27. req.Durable,
  28. req.Exclusive,
  29. req.AutoDelete,
  30. )
  31. if err != nil {
  32. return &types.QueryResult{
  33. Success: false,
  34. Error: "Failed to create queue: " + err.Error(),
  35. Time: time.Now().Format(time.RFC3339),
  36. }
  37. }
  38. return &types.QueryResult{
  39. Success: true,
  40. Message: "Queue created successfully",
  41. Time: time.Now().Format(time.RFC3339),
  42. Data: map[string]interface{}{
  43. "queue_name": req.QueueName,
  44. "durable": req.Durable,
  45. "exclusive": req.Exclusive,
  46. "auto_delete": req.AutoDelete,
  47. "channel": req.ChannelName,
  48. },
  49. }
  50. }
  51. // BindQueue 绑定队列到交换机
  52. func BindQueue(rabbitFactory *rabbitmq.RabbitMQFactory, req types.QueueBindRequest, reqCtx *ctx.RequestContext) *types.QueryResult {
  53. // 设置默认值
  54. if req.ChannelName == "" {
  55. req.ChannelName = "default"
  56. }
  57. if req.RoutingKey == "" {
  58. req.RoutingKey = req.QueueName
  59. }
  60. // 绑定队列
  61. err := rabbitFactory.BindQueue(
  62. req.ChannelName,
  63. req.QueueName,
  64. req.ExchangeName,
  65. req.RoutingKey,
  66. )
  67. if err != nil {
  68. return &types.QueryResult{
  69. Success: false,
  70. Error: "Failed to bind queue: " + err.Error(),
  71. Time: time.Now().Format(time.RFC3339),
  72. }
  73. }
  74. return &types.QueryResult{
  75. Success: true,
  76. Message: "Queue bound to exchange successfully",
  77. Time: time.Now().Format(time.RFC3339),
  78. Data: map[string]interface{}{
  79. "queue": req.QueueName,
  80. "exchange": req.ExchangeName,
  81. "routing_key": req.RoutingKey,
  82. "channel": req.ChannelName,
  83. },
  84. }
  85. }