private static void Main() { //客户端基本服务。 ISerializer <string> serializer = new JsonSerializer(); ISerializer <byte[]> byteArraySerializer = new StringByteArraySerializer(serializer); ISerializer <object> objectSerializer = new StringObjectSerializer(serializer); IServiceIdGenerator serviceIdGenerator = new DefaultServiceIdGenerator(new ConsoleLogger <DefaultServiceIdGenerator>()); var typeConvertibleService = new DefaultTypeConvertibleService(new[] { new DefaultTypeConvertibleProvider(objectSerializer) }, new ConsoleLogger <DefaultTypeConvertibleService>()); var serviceRouteManager = new SharedFileServiceRouteManager("d:\\routes.txt", serializer, new ConsoleLogger <SharedFileServiceRouteManager>()); //zookeeper服务路由管理者。 // var serviceRouteManager = new ZooKeeperServiceRouteManager(new ZooKeeperServiceRouteManager.ZookeeperConfigInfo("172.18.20.132:2181"), serializer, new ConsoleLogger<ZooKeeperServiceRouteManager>()); // IAddressSelector addressSelector = new RandomAddressSelector(); IAddressSelector addressSelector = new PollingAddressSelector(); IAddressResolver addressResolver = new DefaultAddressResolver(serviceRouteManager, new ConsoleLogger <DefaultAddressResolver>(), addressSelector); ITransportClientFactory transportClientFactory = new DotNettyTransportClientFactory(byteArraySerializer, new ConsoleLogger <DotNettyTransportClientFactory>()); var remoteInvokeService = new RemoteInvokeService(addressResolver, transportClientFactory, new ConsoleLogger <RemoteInvokeService>()); //服务代理相关。 IServiceProxyGenerater serviceProxyGenerater = new ServiceProxyGenerater(serviceIdGenerator); var services = serviceProxyGenerater.GenerateProxys(new[] { typeof(IUserService) }).ToArray(); IServiceProxyFactory serviceProxyFactory = new ServiceProxyFactory(remoteInvokeService, typeConvertibleService); //创建IUserService的代理。 var userService = serviceProxyFactory.CreateProxy <IUserService>(services.Single(typeof(IUserService).IsAssignableFrom)); var logger = new ConsoleLogger(); while (true) { Task.Run(async() => { try { Console.WriteLine($"userService.GetUserName:{await userService.GetUserName(1)}"); Console.WriteLine($"userService.GetUserId:{await userService.GetUserId("rabbit")}"); Console.WriteLine($"userService.GetUserLastSignInTime:{await userService.GetUserLastSignInTime(1)}"); Console.WriteLine($"userService.Exists:{await userService.Exists(1)}"); var user = await userService.GetUser(1); Console.WriteLine($"userService.GetUser:name={user.Name},age={user.Age}"); Console.WriteLine($"userService.Update:{await userService.Update(1, user)}"); Console.WriteLine($"userService.GetDictionary:{(await userService.GetDictionary())["key"]}"); await userService.TryThrowException(); } catch (RpcRemoteException remoteException) { logger.Error(remoteException.Message); } }).Wait(); Console.ReadLine(); } }
public async void PollingAddressSyncTest() { IAddressSelector selector = new PollingAddressSelector(_serviceRouteManager); var context = GetSelectContext(); var numbers = new List <int>(); for (var i = 0; i < 500; i++) { var address = (IpAddressModel)await selector.SelectAsync(context); numbers.Add(address.Port); } var isOk = true; for (var i = 0; i < numbers.Count; i++) { if (numbers.Count == i + 1) { break; } var current = numbers[i]; var next = numbers[i + 1]; if (current == next - 1) { continue; } isOk = false; break; } if (isOk) { Assert.True(true); } else { Assert.False(false, string.Join("", numbers)); } }
public async void PollingAddressChangeTest() { IAddressSelector selector = new PollingAddressSelector(_serviceRouteManager); await selector.SelectAsync(GetSelectContext()); await selector.SelectAsync(GetSelectContext()); var address = (IpAddressModel)await selector.SelectAsync(GetSelectContext()); Assert.Equal(3, address.Port); //更新路由信息。 await _serviceRouteManager.SetRoutesAsync(new[] { new ServiceRoute { Address = new[] { new IpAddressModel("127.0.0.1", 0), new IpAddressModel("127.0.0.1", 2) }, ServiceDescriptor = new ServiceDescriptor { Id = "service1" } } }); address = (IpAddressModel)await selector.SelectAsync(GetSelectContext()); Assert.Equal(0, address.Port); address = (IpAddressModel)await selector.SelectAsync(GetSelectContext()); Assert.Equal(2, address.Port); ((TestServiceRouteManager)_serviceRouteManager).Reset(); }