本文整理匯總了Golang中github.com/cloudfoundry/yagnats.NATSClient.PublishWithReplyTo方法的典型用法代碼示例。如果您正苦於以下問題:Golang NATSClient.PublishWithReplyTo方法的具體用法?Golang NATSClient.PublishWithReplyTo怎麽用?Golang NATSClient.PublishWithReplyTo使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類github.com/cloudfoundry/yagnats.NATSClient
的用法示例。
在下文中一共展示了NATSClient.PublishWithReplyTo方法的2個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Golang代碼示例。
示例1: RemoteAuction
func RemoteAuction(client yagnats.NATSClient, auctionRequest types.AuctionRequest) types.AuctionResult {
guid := util.RandomGuid()
payload, _ := json.Marshal(auctionRequest)
c := make(chan []byte)
client.Subscribe(guid, func(msg *yagnats.Message) {
c <- msg.Payload
})
client.PublishWithReplyTo("diego.auction", guid, payload)
var responsePayload []byte
select {
case responsePayload = <-c:
case <-time.After(time.Minute):
return types.AuctionResult{}
}
var auctionResult types.AuctionResult
err := json.Unmarshal(responsePayload, &auctionResult)
if err != nil {
panic(err)
}
return auctionResult
}
示例2: runSimulation
//.........這裏部分代碼省略.........
Timestamp time.Time `json:"_timestamp"`
Task models.Task `json:"task"`
}
err := json.Unmarshal(msg.Payload, &desiredLog)
if err != nil {
panic(err)
}
registerDesired(desiredLog.Task.Guid, desiredLog.Timestamp)
})
_, err = natsClient.Subscribe("error.>", func(msg *yagnats.Message) {
var errorLog struct {
Timestamp time.Time `json:"_timestamp"`
Error string `json:"error"`
}
err := json.Unmarshal(msg.Payload, &errorLog)
if err != nil {
panic(err)
}
registerError(msg.Subject+": "+errorLog.Error, errorLog.Timestamp)
})
_, err = natsClient.Subscribe("fatal.>", func(msg *yagnats.Message) {
var errorLog struct {
Timestamp time.Time `json:"_timestamp"`
Error string `json:"error"`
}
err := json.Unmarshal(msg.Payload, &errorLog)
if err != nil {
panic(err)
}
registerError(msg.Subject+": "+errorLog.Error, errorLog.Timestamp)
})
executorIndexes := map[string]int{}
_, err = natsClient.Subscribe("completed-task", func(msg *yagnats.Message) {
defer func() {
e := recover()
if e != nil {
logger.Error("RECOVERED PANIC:", e)
}
}()
var task *models.Task
err := json.Unmarshal(msg.Payload, &task)
if err != nil {
panic(err)
}
simulationLock.Lock()
index, ok := executorIndexes[task.ExecutorID]
if !ok {
index = len(executorIndexes) + 1
executorIndexes[task.ExecutorID] = index
}
data, ok := taskTracker[task.Guid]
if !ok {
logger.Error("uknown.runonce.completed", task.Guid, "executor", task.ExecutorID)
simulationLock.Unlock()
return
}
data.CompletionTime = float64(time.Now().UnixNano()) / 1e9
logger.Info("runonce.completed", task.Guid, "executor", task.ExecutorID, "duration", data.CompletionTime-data.DesiredTime)
data.ExecutorIndex = index
data.NumCompletions++
simulationLock.Unlock()
simulationWait.Done()
})
if err != nil {
panic(err)
}
err = natsClient.PublishWithReplyTo("stage", "completed-task", payload)
if err != nil {
panic(err)
}
cleanup.Register(func() {
dt := time.Since(t)
logger.Info("simulation.end", nTasks, "runtime", dt)
simulationResult(dt)
simulationErrors()
})
simulationWait.Wait()
}