Golang-如何创建回调通知

时间:2019-03-05 13:33:51

标签: go

我正在尝试实现一种情况,即客户端发送POST请求以向服务器订阅某些服务。

服务器必须使用订阅数据进行响应,但是如果服务器中的订阅信息发生更改,则一段时间后,服务器必须使用“ nfStatusNotificationUri”向客户端发送有关更改的通知。请求正文(JSON中的“ nfStatusNotificationUri” 数据)。

我不知道该怎么做。

我已经实现了POST订阅部分,但不知道如何实现通知部分。

任何人都可以帮助我,或者给我一些有关enter code here的指导的方法。

这是我到目前为止所做的:

//服务器 //函数

func (m *NfInstanceDataAccess) Insertsub(nfinstancesub Subscriptions) error {
    err := db.C(COLLECTION).Insert(&nfinstancesub)
    return err
}

func CreateNewSubscriptionPost(w http.ResponseWriter, r *http.Request) {
    var nfinstancesub Subscriptions
    id := uuid.New()
    subscriptionID := id.String()

    if r.Header.Get("Accept") != "application/json" {
        WriteError(w, ErrNotAcceptable)
        return
    }
    if err := json.NewDecoder(r.Body).Decode(&nfinstancesub); err != nil {
        respondWithError(w, http.StatusBadRequest, "Invalid request payload")
        return
    }
    nfinstancesub.ID = bson.NewObjectId()
    nfinstancesub.SubscriptionID = subscriptionID
    if err := da.Insertsub(nfinstancesub); err != nil {
        respondWithError(w, http.StatusInternalServerError, err.Error())
        return
    }
    w.Header().Set("Response-Code", "201")
    w.Header().Set("Response-Desc", "Success")
    w.Header().Set("Cache-Control", "max-age=2592000") // 30 days
    respondWithJson(w, http.StatusCreated, nfinstancesub)
}

//主要功能

func main() {
    http.HandleFunc("/nnrf-nfm/v1/subscriptions, CreateNewSubscriptionPost)

    log.Fatal(http.ListenAndServe(":8080", nil))
}

请求订阅的JSON数据,包括通知uri“ nfStatusNotificationUri”字段。 我正在使用mongodb存储此JSON数据请求。

{
  "nfStatusNotificationUri": "string",
  "subscriptionID": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "validityTime": "2019-02-11T09:45:52.015Z",
  "reqNotifEvents": [
    "NF_REGISTERED",
    "string"
  ],
  "plmnId": {
    "mcc": "string",
    "mnc": "string"
  },
  "notifCondition": {
    "monitoredAttributes": [
      "string"
    ],
    "unmonitoredAttributes": [
      "string"
    ]
  },
  "reqNfFqdn": "string"
}

0 个答案:

没有答案