示例#1
0
func (server *serverCodec) WriteResponse(resp *rpc.Response, v interface{}) error {
	body, err := server.codec.codec.Marshal(v)
	if err != nil {
		return err
	}

	server.lock.RLock()
	route, ok := server.calls[resp.Seq]
	server.lock.RUnlock()
	if !ok {
		return errors.New("sequence dosen't have a route")
	}

	publishing := amqp.Publishing{
		ReplyTo:       resp.ServiceMethod,
		MessageId:     route.messageID,
		CorrelationId: route.routing,
		Body:          body,
	}

	if resp.Error != "" {
		publishing.Headers = amqp.Table{"error": resp.Error}
	}

	return server.channel.Publish(
		"",
		route.routing,
		false,
		false,
		publishing,
	)
}