예제 #1
0
 public RemoteInvokeService(IHashAlgorithm hashAlgorithm, IAddressResolver addressResolver, ITransportClientFactory transportClientFactory, ILogger <RemoteInvokeService> logger, IHealthCheckService healthCheckService)
 {
     _addressResolver        = addressResolver;
     _transportClientFactory = transportClientFactory;
     _logger             = logger;
     _healthCheckService = healthCheckService;
 }
예제 #2
0
 public RemoteInvokeService(IAddressResolver addressResolver, ITransportClientFactory transportClientFactory, ILogger<RemoteInvokeService> logger, IHealthCheckService healthCheckService)
 {
     _addressResolver = addressResolver;
     _transportClientFactory = transportClientFactory;
     _logger = logger;
     _healthCheckService = healthCheckService;
 }
 public MqttRemoteInvokeService(ITransportClientFactory transportClientFactory,
                                ILogger <MqttRemoteInvokeService> logger,
                                IHealthCheckService healthCheckService,
                                IMqttBrokerEntryManger mqttBrokerEntryManger)
 {
     _transportClientFactory = transportClientFactory;
     _logger                = logger;
     _healthCheckService    = healthCheckService;
     _mqttBrokerEntryManger = mqttBrokerEntryManger;
 }
예제 #4
0
 public RtmpRemoteInvokeService(IServiceRouteProvider serviceRotueProvider, ILogger <RtmpRemoteInvokeService> logger,
                                IHealthCheckService healthCheckService,
                                ITransportClientFactory transportClientFactory)
 {
     _serviceRotueProvider = serviceRotueProvider;
     _logger                 = logger;
     _healthCheckService     = healthCheckService;
     _transportClientFactory = transportClientFactory;
     _routePath              = RoutePatternParser.Parse(AppConfig.Option.RouteTemplate, "ILiveRomtePublishService", "Publish");
 }
예제 #5
0
 public DotNettyRemoteServiceInvoker(ServiceRouteCache serviceRouteCache,
                                     IRemoteServiceSupervisor remoteServiceSupervisor,
                                     ITransportClientFactory transportClientFactory,
                                     IHealthCheck healthCheck)
 {
     _serviceRouteCache       = serviceRouteCache;
     _remoteServiceSupervisor = remoteServiceSupervisor;
     _transportClientFactory  = transportClientFactory;
     _healthCheck             = healthCheck;
     Logger = NullLogger <DotNettyRemoteServiceInvoker> .Instance;
 }
예제 #6
0
 public RemoteServiceCaller(IClientServiceDiscovery serviceDiscovery, IAddressSelector addressSelector,
                            ITransportClientFactory transportClientFactory, ITypeConvertProvider typeConvertProvider,
                            IServiceTokenGetter serviceTokenGetter, ILogger logger, int retryTimes = -1)
 {
     _serviceDiscovery       = serviceDiscovery;
     _addressSelector        = addressSelector;
     _transportClientFactory = transportClientFactory;
     _typeConvertProvider    = typeConvertProvider;
     _serviceTokenGetter     = serviceTokenGetter;
     _logger     = logger;
     _retryTimes = retryTimes;
 }
예제 #7
0
 public RemoteServiceExecutor(IClientServiceDiscovery serviceDiscovery, IAddressSelector addressSelector,
                              IServiceTokenGetter serviceTokenGetter, ITransportClientFactory transportClientFactory,
                              ITypeConvertProvider typeConvertProvider, ILogger logger, ISerializer serializer,
                              IAuthorizationHandler authorizationHandler = null, ICache <string, List <ServerAddress> > cache = null, int retryTimes = -1)
 {
     _serviceDiscovery       = serviceDiscovery;
     _addressSelector        = addressSelector;
     _transportClientFactory = transportClientFactory;
     _typeConvertProvider    = typeConvertProvider;
     _serviceTokenGetter     = serviceTokenGetter;
     _authorizationHandler   = authorizationHandler;
     _cache      = cache;
     _logger     = logger;
     _retryTimes = retryTimes;
     _serializer = serializer;
 }
예제 #8
0
        public static IServiceHostClientBuilder UseRpcForTransfer(this IServiceHostClientBuilder serviceHostBuilder)
        {
            serviceHostBuilder.AddInitializer(container =>
            {
                ITransportClientFactory factory = container.Resolve <ITransportClientFactory>();
                ILogger logger         = container.Resolve <ILogger>();
                ISerializer serializer = container.Resolve <ISerializer>();
                Bootstrap bootstrap    = new Bootstrap();

                logger.Info($"启动rpc客户端");

                bootstrap
                .Group(new MultithreadEventLoopGroup())
                .Channel <TcpSocketChannel>()
                .Option(ChannelOption.TcpNodelay, true)
                .Handler(new ActionChannelInitializer <IChannel>(channel =>
                {
                    IChannelPipeline pipeline = channel.Pipeline;
                    pipeline.AddLast(new LengthFieldPrepender(4));
                    pipeline.AddLast(new LengthFieldBasedFrameDecoder(int.MaxValue, 0, 4, 0, 4));
                    pipeline.AddLast(new ReadClientMessageChannelHandler(serializer));
                    pipeline.AddLast(new RpcClientHandler(factory));
                }));
                AttributeKey <IClientSender> clientSenderKey     = AttributeKey <IClientSender> .ValueOf(typeof(DefaultTransportClientFactory), nameof(IClientSender));
                AttributeKey <IClientListener> clientListenerKey = AttributeKey <IClientListener> .ValueOf(typeof(DefaultTransportClientFactory), nameof(IClientListener));

                factory.ClientCreatorDelegate += (ServerAddress address, ref ITransportClient client) =>
                {
                    if (client == null && address.ServerFlag == ServerFlag.Rpc)
                    {
                        EndPoint ep                = address.CreateEndPoint();
                        IChannel channel           = bootstrap.ConnectAsync(ep).Result;
                        RpcClientListener listener = new RpcClientListener();
                        channel.GetAttribute(clientListenerKey).Set(listener);
                        RpcClientSender sender = new RpcClientSender(channel, serializer);
                        channel.GetAttribute(clientSenderKey).Set(sender);
                        client = new DefaultTransportClient(listener, sender, serializer, logger);
                    }
                };
            });

            return(serviceHostBuilder);
        }
예제 #9
0
파일: Startup.cs 프로젝트: LeoZhw/LeoCms
        internal static void Test()
        {
            Task.Run(async() =>
            {
                do
                {
                    Console.WriteLine("正在循环 1万次发送消息.....");

                    //1w次调用
                    var watch = Stopwatch.StartNew();
                    for (var i = 1; i < 10000; i++)
                    {
                        var invokeMessage = new TransportMessage
                        {
                            Id          = i.ToString(),
                            ContentType = "string",
                            Content     = "你好啊,这是客户端发给服务端的消息"
                        };
                        try
                        {
                            var endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 981);
                            ITransportClientFactory transportClientFactory = _container.Resolve <ITransportClientFactory>();
                            var client = await transportClientFactory.CreateClientAsync(endPoint);
                            await client.SendAsync(invokeMessage);
                        }
                        catch (Exception exception)
                        {
                            Console.WriteLine(exception.ToString(), $"发起请求中发生了错误,服务Id:{invokeMessage.Id}。");
                            throw;
                        }
                    }
                    watch.Stop();
                    Console.WriteLine($"1万次发送结束,执行时间:{watch.ElapsedMilliseconds}ms");
                    Console.WriteLine("Press any key to continue, q to exit the loop...");
                    var key = Console.ReadLine();
                    if (key.ToLower() == "q")
                    {
                        break;
                    }
                } while (true);
            }).Wait();
        }
예제 #10
0
 public DefaultTransportDispatcher(ITransportClientFactory transportClientFactory,
                                   TransportClientOptions clientOptions)
 {
     _transportClientFactory = transportClientFactory ?? throw new ArgumentNullException(nameof(transportClientFactory));
     _clientOptions          = clientOptions ?? throw new ArgumentNullException(nameof(clientOptions));
 }
예제 #11
0
 public RemoteInvokeService(IAddressResolver addressResolver, ITransportClientFactory transportClientFactory, ILogger<RemoteInvokeService> logger)
 {
     _addressResolver = addressResolver;
     _transportClientFactory = transportClientFactory;
     _logger = logger;
 }
예제 #12
0
 public RemoteInvokeService(ITransportClientFactory transportClientFactory, ILogger <RemoteInvokeService> logger)
 {
     _transportClientFactory = transportClientFactory;
     _logger = logger;
 }
예제 #13
0
 public ClientHandlerChannelHandlerAdapter(ITransportClientFactory factory
                                           , ILogger logger)
 {
     _factory = factory;
     _logger  = logger;
 }
예제 #14
0
 public RemoteInvokeService(IAddressResolver addressResolver, ITransportClientFactory transportClientFactory, ILogger <RemoteInvokeService> logger)
 {
     _addressResolver        = addressResolver;
     _transportClientFactory = transportClientFactory;
     _logger = logger;
 }
예제 #15
0
 public RpcClientHandler(ITransportClientFactory factory)
 {
     _factory = factory;
 }