func (s *client) send(ch *amqp.Channel, group uint64, o *Options, payload []byte) ([]byte, error) { id, err := s.flake.Next() if err != nil { return nil, err } groupString := fmt.Sprintf("%d", group) envelope := amqp.Publishing{ MessageId: fmt.Sprintf("%d", id), CorrelationId: groupString, Body: payload, DeliveryMode: amqp.Transient, Headers: amqp.Table{timestampHeader: time.Now().UnixNano()}, } if o.Persistent { envelope.DeliveryMode = amqp.Persistent } mandatory := false immediate := false if err := ch.Publish(o.Exchange, o.Key, mandatory, immediate, envelope); err != nil { return nil, fmt.Errorf("Could not publish to exchange %s: %s", o.Exchange, err) } h := murmur3.New32() h.Write(payload) sum := h.Sum(nil) size := float32(len(payload)) / 1024 if len(o.Verbose) > 0 { log.Infof("[%d] sending %.2f kB (%x) to %s", id, size, sum, o.Key) } else { log.Infof("[%d] sending %.2f kB (%x)", id, size, sum) } return sum, nil }