Nav apraksta
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package handlers
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. "time"
  8. "git.x2erp.com/qdy/go-base/types"
  9. )
  10. // HTTPHandler HTTP处理器实现MessageHandler接口
  11. type HTTPHandler struct {
  12. client *http.Client
  13. }
  14. // NewHTTPHandler 创建HTTP处理器
  15. func NewHTTPHandler() *HTTPHandler {
  16. return &HTTPHandler{
  17. client: &http.Client{
  18. Timeout: 30 * time.Second,
  19. Transport: &http.Transport{
  20. MaxIdleConns: 100,
  21. MaxIdleConnsPerHost: 100,
  22. IdleConnTimeout: 90 * time.Second,
  23. },
  24. },
  25. }
  26. }
  27. // Process 处理消息,发送HTTP POST请求
  28. func (h *HTTPHandler) Process(queueRequest *types.QueueRequest, body []byte) types.QueryResult {
  29. if queueRequest.Url == "" {
  30. return types.QueryResult{
  31. Success: false,
  32. Message: "URL is empty",
  33. }
  34. }
  35. // 准备请求体
  36. requestBody := map[string]interface{}{
  37. "queue": queueRequest.QueueName,
  38. "data": string(body),
  39. "timestamp": time.Now().Format(time.RFC3339),
  40. }
  41. jsonBody, err := json.Marshal(requestBody)
  42. if err != nil {
  43. return types.QueryResult{
  44. Success: false,
  45. Message: fmt.Sprintf("Failed to marshal request: %v", err),
  46. }
  47. }
  48. // 发送HTTP POST请求
  49. resp, err := h.client.Post(queueRequest.Url, "application/json", bytes.NewBuffer(jsonBody))
  50. if err != nil {
  51. return types.QueryResult{
  52. Success: false,
  53. Message: fmt.Sprintf("HTTP request failed: %v", err),
  54. }
  55. }
  56. defer resp.Body.Close()
  57. if resp.StatusCode >= 200 && resp.StatusCode < 300 {
  58. return types.QueryResult{
  59. Success: true,
  60. Message: "Message processed successfully",
  61. }
  62. }
  63. return types.QueryResult{
  64. Success: false,
  65. Message: fmt.Sprintf("HTTP error: %s", resp.Status),
  66. }
  67. }