public ProducerConfiguration(IDictionary <string, string> configuration, MessageIdGenerator messageIdGenerator, IOutgoingMessageRegistry outgoingMessageRegistry, IKafkaProducerFactory kafkaProducerFactory) { _configuration = configuration; MessageIdGenerator = messageIdGenerator; OutgoingMessageRegistry = outgoingMessageRegistry; KafkaProducerFactory = kafkaProducerFactory; }
internal OutboxQueue(MessageIdGenerator messageIdGenerator, OutgoingMessageRegistry outgoingMessageRegistry, IOutboxEntryRepository repository, IOutboxNotifier outboxNotifier, TopicPayloadSerializerRegistry serializerRegistry) { _repository = repository; _outboxNotifier = outboxNotifier; _serializerRegistry = serializerRegistry; _payloadDescriptorFactory = new PayloadDescriptorFactory(outgoingMessageRegistry, messageIdGenerator); }
public RpcTransportMessageRequest BuidRpcTransportMessage(LegancyISellerConfiguration configuration) { string messageId = MessageIdGenerator.CreateMessageId(); return(new RpcTransportMessageRequest(messageId) { MessageHeader = new RpcTransportMessageHeader() /*TODO: 请求上下文*/ } {
protected async Task <OperationResult <TResult> > SendOperation <TOp, TResult>(TOp operation, IEnumerable <Session> receivers, CancellationToken token) where TOp : IOperation <TResult> { var description = Model.GetDescriptionBy(typeof(TOp)); Logger.LogDebug("Start send operation {operation}, code: {code}", operation, description.Code); var context = receivers?.FirstOrDefault(); var op = new TRequest { OperationCode = description.Code, OperationData = description.UseAsyncSerialize ? await _serializer.SerializeAsync(operation, context) : _serializer.Serialize(operation, context), Id = MessageIdGenerator.Generate() }; MessagePlaceHolder?.Fill(ref op, operation); op.Type = TypeMessage.Request; Logger.LogDebug("Operation serialized {operation}", operation); var rawResult = _serializer.Serialize(op, context); await SendRequest(receivers, rawResult, description.ForRequest); Logger.LogDebug("Operation sent {operation}", operation); if (description.WaitResponse) { using (var composite = CancellationTokenSource.CreateLinkedTokenSource(token, GlobalToken)) { Task <OperationResult <TResult> > response = null; try { var state = StatesPool.Get(); state.Context = context; response = new Task <OperationResult <TResult> >(OperationResultHandle <TResult>, state, composite.Token, TaskCreationOptions.PreferFairness); _responseQueue.TryAdd(new OperationId(op.Id, op.OperationCode), response); return(await response); } catch (OperationCanceledException) { await SendCancel(receivers, op); throw; } catch (Exception) { if (response != null) { _responseQueue.TryRemove(new OperationId(op.Id, op.OperationCode), out _); StatesPool.Return((State)response.AsyncState); } throw; } } } return(new OperationResult <TResult>(default, BuiltInOperationState.NoWaiting));
public ActionResult CancelMandateResult(CancellationRequest model) { if (String.IsNullOrEmpty(model.MessageId)) { model.MessageId = MessageIdGenerator.New(); } var response = b2bCommunicator.Cancel(model); return(View(response)); }
/// <summary> /// 响应远程请求 /// </summary> public RpcTransportMessageResponse ProcessCommand(RpcTransportMessageRequest rpcRequest /*TODO: 请求上下文信息*/) { //本地服务发现 ServiceCommandTypeInfo localCommandInfo = null; bool isLocalCommand = this.serviceBusRegistry.IsLocalServiceCommand(rpcRequest.ServiceUniqueName, out localCommandInfo); string responseMessageContent = null; if (isLocalCommand) { using (performanceCounter.BeginStopwatch(string.Format("localInvoke: {0}", rpcRequest.ServiceUniqueName.FullServiceUniqueName))) { //本地服务 IServiceCommandResult commandResult = null; var commandData = (IServiceCommand)this.serializer.DeserializeString(localCommandInfo.CommandType, rpcRequest.MessageContent); bool triggeredLocal = serviceBus.triggerLocalCommand(localCommandInfo.CommandType, localCommandInfo.CommandResultType, commandData, out commandResult); if (!triggeredLocal) { throw new WindServiceBusLocalServiceNotFoundException(rpcRequest.ServiceUniqueName.FullServiceUniqueName); } // 去除null判断,允许数据内容为null //if (commandResult == null) //{ // throw new WindServiceBusException(string.Format("service command [{0}] process error!", rpcRequest.ServiceUniqueName.FullServiceUniqueName)); //} responseMessageContent = this.serializer.SerializeString(commandResult); } } else { using (performanceCounter.BeginStopwatch(string.Format("remoteInvoke: {0}", rpcRequest.ServiceUniqueName.FullServiceUniqueName))) { //远程服务 var resultWithContext = serviceBus.triggerRemoteCommand(rpcRequest.ServiceUniqueName, rpcRequest.MessageContent); responseMessageContent = resultWithContext.ResponseMessageContent; } } //构建响应输出 var messageHeader = new RpcTransportMessageHeader(); var rpcResponse = new RpcTransportMessageResponse(MessageIdGenerator.CreateMessageId()) { MessageHeader = messageHeader, CorrelationMessageId = rpcRequest.MessageId, ServiceUniqueName = rpcRequest.ServiceUniqueName, MessageContent = responseMessageContent }; return(rpcResponse); }
/// <summary> /// 响应远程广播请求 /// </summary> /// <param name="rpcRequest"></param> /// <returns></returns> public RpcTransportMessageResponse ProcessBroadcastCommand(RpcTransportMessageRequest rpcRequest) { List <string> resultList = new List <string>(); //1. 本地调用 using (performanceCounter.BeginStopwatch(string.Format("localBroadcastInvoke: {0}", rpcRequest.ServiceUniqueName.FullServiceUniqueName))) { ServiceCommandTypeInfo localCommandInfo = null; bool isLocalCommand = this.serviceBusRegistry.IsLocalServiceCommand(rpcRequest.ServiceUniqueName, out localCommandInfo); if (isLocalCommand) { IServiceCommandResult commandResult = null; var commandData = (IServiceCommand)this.serializer.DeserializeString(localCommandInfo.CommandType, rpcRequest.MessageContent); bool triggeredLocal = serviceBus.triggerLocalCommand(localCommandInfo.CommandType, localCommandInfo.CommandResultType, commandData, out commandResult); if (triggeredLocal) { string responseMessageContent = this.serializer.SerializeString(commandResult); resultList.Add(responseMessageContent); } } } using (performanceCounter.BeginStopwatch(string.Format("remoteBroadcastInvoke: {0}", rpcRequest.ServiceUniqueName.FullServiceUniqueName))) { //2. 远程调用 var resultWithContext = serviceBus.broadcastRemoteCommand(rpcRequest.ServiceUniqueName, rpcRequest.MessageContent); resultList.AddRange(resultWithContext.Select(r => r.ResponseMessageContent)); } //3. 构建响应输出 var contentResult = this.serializer.CombineToArray(resultList); var messageHeader = new RpcTransportMessageHeader(); var rpcResponse = new RpcTransportMessageResponse(MessageIdGenerator.CreateMessageId()) { MessageHeader = messageHeader, CorrelationMessageId = rpcRequest.MessageId, ServiceUniqueName = rpcRequest.ServiceUniqueName, MessageContent = contentResult }; return(rpcResponse); }
private static MTProtoClientBuilder CreateDefault() { var clientTransportFactory = new ClientTransportFactory(); var tlRig = new TLRig(); var messageIdGenerator = new MessageIdGenerator(); var hashServices = new HashServices(); var encryptionServices = new EncryptionServices(); var randomGenerator = new RandomGenerator(); var messageCodec = new MessageCodec(tlRig, hashServices, encryptionServices, randomGenerator); var keyChain = new KeyChain(tlRig, hashServices); var nonceGenerator = new NonceGenerator(); return new MTProtoClientBuilder(clientTransportFactory, tlRig, messageIdGenerator, messageCodec, hashServices, encryptionServices, nonceGenerator, keyChain); }
public ActionResult NewMandateResult(NewMandateRequestViewModel model) { if (String.IsNullOrEmpty(model.Source.MessageId)) { model.Source.MessageId = MessageIdGenerator.New(); } if (model.Instrumentation == Instrumentation.Core) { return(View(new NewMandateResponseViewModel { Source = coreCommunicator.NewMandate(model.Source), Instrumentation = Instrumentation.Core })); } if (model.Instrumentation == Instrumentation.B2B) { return(View(new NewMandateResponseViewModel { Source = b2bCommunicator.NewMandate(model.Source), Instrumentation = Instrumentation.B2B })); } throw new Exception("Instrumentation should either be Core or B2B."); }
protected void Page_Load(object sender, EventArgs e) { DataTable ships = DataBaseHandler.getActiveShips(); messageIdGenerator = new MessageIdGenerator(); shipList = new List <Vessel>(); dateHandler = new DateHandler(); foreach (DataRow ship in ships.Rows) { var v = new Vessel { imo = ship["imoNumber"].ToString(), name = ship["name"].ToString(), photoURL = ship["imgURL"].ToString(), portCallId = ship["portCallID"].ToString() }; shipList.Add(v); } if (!IsPostBack) { initPage(); } }
public void WithMessageIdGenerator(MessageIdGenerator messageIdGenerator) { _messageIdGenerator = messageIdGenerator; }
public OutboxMessageCollector(MessageIdGenerator messageIdGenerator, IOutgoingMessageRegistry outgoingMessageRegistry, IOutboxMessageRepository repository) { _outgoingMessageFactory = new OutgoingMessageFactory(outgoingMessageRegistry, messageIdGenerator); _repository = repository; }
public OutboxConfiguration(MessageIdGenerator messageIdGenerator, IOutboxNotifier notifier, TopicPayloadSerializerRegistry topicPayloadSerializerRegistry) { MessageIdGenerator = messageIdGenerator; Notifier = notifier; TopicPayloadSerializerRegistry = topicPayloadSerializerRegistry; }
public OutboxConfiguration(MessageIdGenerator messageIdGenerator) { MessageIdGenerator = messageIdGenerator; }
public ProducerConfiguration(IDictionary <string, string> configuration, MessageIdGenerator messageIdGenerator, Func <ILoggerFactory, KafkaProducer> kafkaProducerFactory) { KafkaConfiguration = configuration; MessageIdGenerator = messageIdGenerator; KafkaProducerFactory = kafkaProducerFactory; }
private bool dispatchCommand( ServiceUniqueNameInfo commandUniqueName, IRpcMessageSenderContext context, string requestMessageContent, out RemoteServiceBusResponseContext responseContext, out string responseMessageContent, out WindServiceBusRpcException rpcException) { // 创建响应上下文 responseMessageContent = null; rpcException = null; responseContext = new RemoteServiceBusResponseContext(); context.FillRemoteContext(responseContext); // 通过RPC框架执行远程调用 try { RpcTransportMessageRequest requestMessage = new RpcTransportMessageRequest(MessageIdGenerator.CreateMessageId()) { ServiceUniqueName = commandUniqueName, MessageHeader = new RpcTransportMessageHeader { //TODO: 其他消息头 }, MessageContent = requestMessageContent, }; RpcTransportMessageResponse responseMessage = this.rpcServerManager.SendMessage(requestMessage, context); //响应上下文 if (responseMessage != null) { responseContext.FillRemoteContext(responseMessage.MessageHeader); //服务响应信息填入RemoteContext } //响应消息验证 if (responseMessage == null || responseMessage.CorrelationMessageId == null || responseMessage.CorrelationMessageId != requestMessage.MessageId || responseMessage.MessageContent == null) { throw new WindServiceBusException(string.Format("request [{0}] get error response !", requestMessage.MessageId)); } if (responseMessage.ResponseCode != RpcTransportResponseCode.Success) { throw new WindServiceBusException(string.Format("request [{0}] get error response: {1}", requestMessage.MessageId, responseMessage.ErrorInfo)); } responseMessageContent = responseMessage.MessageContent; return(true); //请求成功 } catch (Exception serviceBusException) { this._logger.Error("WindServiceBusException: " + commandUniqueName, serviceBusException); rpcException = new WindServiceBusRpcException(responseContext, serviceBusException); return(false); //请求失败 } }
public ProducerConfigurationBuilder WithMessageIdGenerator(MessageIdGenerator messageIdGenerator) { _messageIdGenerator = messageIdGenerator; return(this); }
public ProducerBuilder With(MessageIdGenerator messageIdGenerator) { _messageIdGenerator = messageIdGenerator; return(this); }
public void WithMessageIdGenerator(MessageIdGenerator messageIdGenerator) { _builder.WithMessageIdGenerator(messageIdGenerator); }
/// <summary> /// 广播命令 /// </summary> internal ICollection <ServiceResponseMessageWithResponseContext> BroadcastCommand(ServiceUniqueNameInfo commandUniqueName, string requestMessageContent) { //1. 服务发现(找到所有可以请求的目标) var remoteContextList = this.rpcServerManager.DiscoverRemoteService(commandUniqueName); if (remoteContextList == null || remoteContextList.Count < 1) { return(new ServiceResponseMessageWithResponseContext[0]); //throw new WindServiceBusRemoteServiceNotFoundException(commandUniqueName.FullServiceUniqueName); } //2. 广播请求 RpcTransportMessageRequest requestMessage = new RpcTransportMessageRequest(MessageIdGenerator.CreateMessageId()) { ServiceUniqueName = commandUniqueName, MessageHeader = new RpcTransportMessageHeader { //TODO: 其他消息头 }, MessageContent = requestMessageContent, }; ICollection <RpcTransportErrorResponse> errorCollection; var responseCollection = this.rpcServerManager.BroadcastMessage(requestMessage, remoteContextList, out errorCollection); var resultList = responseCollection.Select(resp => new ServiceResponseMessageWithResponseContext(resp.MessageContent, new RemoteServiceBusResponseContext(resp.MessageHeader))).ToList(); if (errorCollection != null && errorCollection.Count > 0) { //TODO: 异常列表返回处理 } return(resultList); }