| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- package handlers
-
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "net/http"
- "time"
-
- "git.x2erp.com/qdy/go-base/types"
- )
-
- // HTTPHandler HTTP处理器实现MessageHandler接口
- type HTTPHandler struct {
- client *http.Client
- }
-
- // NewHTTPHandler 创建HTTP处理器
- func NewHTTPHandler() *HTTPHandler {
- return &HTTPHandler{
- client: &http.Client{
- Timeout: 30 * time.Second,
- Transport: &http.Transport{
- MaxIdleConns: 100,
- MaxIdleConnsPerHost: 100,
- IdleConnTimeout: 90 * time.Second,
- },
- },
- }
- }
-
- // Process 处理消息,发送HTTP POST请求
- func (h *HTTPHandler) Process(queueRequest *types.QueueRequest, body []byte) types.QueryResult {
- if queueRequest.Url == "" {
- return types.QueryResult{
- Success: false,
- Message: "URL is empty",
- }
- }
-
- // 准备请求体
- requestBody := map[string]interface{}{
- "queue": queueRequest.QueueName,
- "data": string(body),
- "timestamp": time.Now().Format(time.RFC3339),
- }
-
- jsonBody, err := json.Marshal(requestBody)
- if err != nil {
- return types.QueryResult{
- Success: false,
- Message: fmt.Sprintf("Failed to marshal request: %v", err),
- }
- }
-
- // 发送HTTP POST请求
- resp, err := h.client.Post(queueRequest.Url, "application/json", bytes.NewBuffer(jsonBody))
- if err != nil {
- return types.QueryResult{
- Success: false,
- Message: fmt.Sprintf("HTTP request failed: %v", err),
- }
- }
- defer resp.Body.Close()
-
- if resp.StatusCode >= 200 && resp.StatusCode < 300 {
- return types.QueryResult{
- Success: true,
- Message: "Message processed successfully",
- }
- }
-
- return types.QueryResult{
- Success: false,
- Message: fmt.Sprintf("HTTP error: %s", resp.Status),
- }
- }
|