Publish an event to Go Cloud.
(evs ...events.Event)
| 179 | |
| 180 | // Publish an event to Go Cloud. |
| 181 | func (ps *PubSub) Publish(evs ...events.Event) { |
| 182 | logger := log.FromContext(ps.ctx) |
| 183 | for _, evt := range evs { |
| 184 | var body []byte |
| 185 | switch ps.contentType { |
| 186 | case "application/protobuf": |
| 187 | evtpb, err := events.Proto(evt) |
| 188 | if err != nil { |
| 189 | logger.WithError(err).Warn("Failed to marshal event to protobuf") |
| 190 | continue |
| 191 | } |
| 192 | body, err = proto.Marshal(evtpb) |
| 193 | if err != nil { |
| 194 | logger.WithError(err).Warn("Failed to marshal event to binary") |
| 195 | continue |
| 196 | } |
| 197 | case "application/json": |
| 198 | var err error |
| 199 | body, err = json.Marshal(evt) |
| 200 | if err != nil { |
| 201 | logger.WithError(err).Warn("Failed to marshal event to JSON") |
| 202 | continue |
| 203 | } |
| 204 | } |
| 205 | if err := ps.topic.Send(evt.Context(), &pubsub.Message{ |
| 206 | Metadata: ps.getMetadata(evt), |
| 207 | Body: body, |
| 208 | }); err != nil { |
| 209 | logger.WithError(err).Warn("Failed to send event") |
| 210 | } |
| 211 | } |
| 212 | } |