Task Send(byte[] body, string messageType, TimeSpan timeToBeReceived) { var headers = new Dictionary<string, string>(); headers[Headers.EnclosedMessageTypes] = messageType; headers[Headers.ContentType] = ContentTypes.Json; //Needed for ActiveMQ transport headers[Headers.ReplyToAddress] = settings.LocalAddress(); headers[Headers.MessageIntent] = sendIntent; var outgoingMessage = new OutgoingMessage(Guid.NewGuid().ToString(), headers, body); var operation = new TransportOperation(outgoingMessage, new UnicastAddressTag(serviceControlBackendAddress), deliveryConstraints: new List<DeliveryConstraint> { new DiscardIfNotReceivedBefore(timeToBeReceived) }); return messageSender.Dispatch(new TransportOperations(operation), new TransportTransaction(), new ContextBag()); }
public async Task Send(ReportCustomCheckResult result, TimeSpan timeToBeReceived) { result.Apply(settings); byte[] body; using (var stream = new MemoryStream()) { var resultAsObject = new object[] { result }; serializer.WriteObject(stream, resultAsObject); body = stream.ToArray(); } //hack to remove the type info from the json var bodyString = Encoding.UTF8.GetString(body); var toReplace = "\"__type\":\"ReportCustomCheckResult:#ServiceControl.Plugin.CustomChecks.Messages\""; bodyString = bodyString.Replace(toReplace, "\"$type\":\"ServiceControl.Plugin.CustomChecks.Messages.ReportCustomCheckResult, ServiceControl\""); body = Encoding.UTF8.GetBytes(bodyString); // end hack var headers = new Dictionary<string, string>(); headers[Headers.EnclosedMessageTypes] = result.GetType().FullName; headers[Headers.ContentType] = ContentTypes.Json; //Needed for ActiveMQ transport headers[Headers.ReplyToAddress] = settings.LocalAddress(); headers[Headers.MessageIntent] = sendIntent; try { var outgoingMessage = new OutgoingMessage(Guid.NewGuid().ToString(), headers, body); var operation = new TransportOperation(outgoingMessage, new UnicastAddressTag(serviceControlBackendAddress), deliveryConstraints: new List<DeliveryConstraint> { new DiscardIfNotReceivedBefore(timeToBeReceived) }); await messageSender.Dispatch(new TransportOperations(operation), new TransportTransaction(), new ContextBag()).ConfigureAwait(false); circuitBreaker.Success(); } catch (Exception ex) { await circuitBreaker.Failure(ex).ConfigureAwait(false); } }
public async Task VerifyIfServiceControlQueueExists() { try { // In order to verify if the queue exists, we are sending a control message to SC. // If we are unable to send a message because the queue doesn't exist, then we can fail fast. // We currently don't have a way to check if Queue exists in a transport agnostic way, // hence the send. var outgoingMessage = ControlMessageFactory.Create(MessageIntentEnum.Send); outgoingMessage.Headers[Headers.ReplyToAddress] = settings.LocalAddress(); var operation = new TransportOperation(outgoingMessage, new UnicastAddressTag(serviceControlBackendAddress)); await messageSender.Dispatch(new TransportOperations(operation), new TransportTransaction(), new ContextBag()).ConfigureAwait(false); } catch (Exception ex) { const string errMsg = @"You have ServiceControl plugins installed in your endpoint, however, this endpoint is unable to contact the ServiceControl Backend to report endpoint information. Please ensure that the Particular ServiceControl queue specified is correct."; throw new Exception(errMsg, ex); } }