diff --git a/src/Grpc.Extension/Internal/AutoChannelCallInvoker.cs b/src/Grpc.Extension/Internal/AutoChannelCallInvoker.cs
index 412231d..062e7e5 100644
--- a/src/Grpc.Extension/Internal/AutoChannelCallInvoker.cs
+++ b/src/Grpc.Extension/Internal/AutoChannelCallInvoker.cs
@@ -12,12 +12,12 @@ namespace Grpc.Extension.Internal
///
internal class AutoChannelCallInvoker : CallInvoker
{
- private ChannelManager _channelManager;
+ private ChannelPool _channelManager;
///
/// 自动负载Channel的CallInvoker
///
- public AutoChannelCallInvoker(ChannelManager channelManager)
+ public AutoChannelCallInvoker(ChannelPool channelManager)
{
this._channelManager = channelManager;
}
diff --git a/src/Grpc.Extension/Internal/ChannelManager.cs b/src/Grpc.Extension/Internal/ChannelPool.cs
similarity index 97%
rename from src/Grpc.Extension/Internal/ChannelManager.cs
rename to src/Grpc.Extension/Internal/ChannelPool.cs
index ade3712..5b682ef 100644
--- a/src/Grpc.Extension/Internal/ChannelManager.cs
+++ b/src/Grpc.Extension/Internal/ChannelPool.cs
@@ -13,7 +13,7 @@ namespace Grpc.Extension.Internal
///
/// Channel统一管理
///
- internal class ChannelManager
+ internal class ChannelPool
{
private ConcurrentDictionary _channels = new ConcurrentDictionary();
private IServiceDiscovery _serviceDiscovery;
@@ -25,7 +25,7 @@ internal class ChannelManager
///
///
///
- public ChannelManager(IServiceDiscovery serviceDiscovery, ILoadBalancer loadBalancer,IMemoryCache memoryCache)
+ public ChannelPool(IServiceDiscovery serviceDiscovery, ILoadBalancer loadBalancer,IMemoryCache memoryCache)
{
this._serviceDiscovery = serviceDiscovery;
this._loadBalancer = loadBalancer;
@@ -99,7 +99,7 @@ private Channel GetChannelCore(string endpoint,ChannelConfig config)
private ChannelInfo CreateChannel(string endPoint, ChannelConfig config)
{
- var channel = new Channel(endPoint, ChannelCredentials.Insecure);
+ var channel = new Channel(endPoint, ChannelCredentials.Insecure, config.ChannelOptions);
var tryCount = 0;//重试计数
//检查channel状态
diff --git a/src/Grpc.Extension/Internal/GrpcClientManager.cs b/src/Grpc.Extension/Internal/GrpcClientManager.cs
index cc6ce77..55aa1af 100644
--- a/src/Grpc.Extension/Internal/GrpcClientManager.cs
+++ b/src/Grpc.Extension/Internal/GrpcClientManager.cs
@@ -35,7 +35,7 @@ public GrpcClientManager(IServiceProvider serviceProvider, IEnumerable
public T GetGrpcClient() where T : ClientBase
{
- var channelManager = GrpcExtensions.ServiceProvider.GetService();
+ var channelManager = GrpcExtensions.ServiceProvider.GetService();
var bindFlags = BindingFlags.Static | BindingFlags.NonPublic;
var grpcServiceName = typeof(T).DeclaringType.GetFieldValue("__ServiceName", bindFlags);
diff --git a/src/Grpc.Extension/Internal/ServerBuilder.cs b/src/Grpc.Extension/Internal/ServerBuilder.cs
index ecc8db0..07de88d 100644
--- a/src/Grpc.Extension/Internal/ServerBuilder.cs
+++ b/src/Grpc.Extension/Internal/ServerBuilder.cs
@@ -201,7 +201,7 @@ private void CheckUseJaeger()
///
public Server Build()
{
- Server server = new Server();
+ Server server = new Server(GrpcServerOptions.Instance.ChannelOptions);
//使用拦截器
var serviceDefinitions = ApplyInterceptor(_serviceDefinitions, _interceptors);
//添加服务定义
diff --git a/src/Grpc.Extension/Model/ChannelConfig.cs b/src/Grpc.Extension/Model/ChannelConfig.cs
index 79d78d1..4c6550e 100644
--- a/src/Grpc.Extension/Model/ChannelConfig.cs
+++ b/src/Grpc.Extension/Model/ChannelConfig.cs
@@ -1,4 +1,5 @@
-using System;
+using Grpc.Core;
+using System.Collections.Generic;
namespace Grpc.Extension.Model
{
@@ -7,14 +8,34 @@ namespace Grpc.Extension.Model
///
internal class ChannelConfig
{
+ ///
+ /// Discovery的服务器地址
+ ///
public string DiscoveryUrl { get; set; }
+ ///
+ /// Discovery上客户端服务名字
+ ///
public string DiscoveryServiceName { get; set; }
+ ///
+ /// 直接服务地址,不用服务现
+ ///
public string DirectEndpoint { get; set; }
+ ///
+ /// 是否使用直接服务地址
+ ///
public bool UseDirect { get; set; }
- public string GrpcServiceName { get; set; }
+ ///
+ /// ChannelOption
+ ///
+ public IEnumerable ChannelOptions { get; set; }
+
+ ///
+ /// GrpcServiceName
+ ///
+ internal string GrpcServiceName { get; set; }
}
}
diff --git a/src/Grpc.Extension/Options/GrpcServerOptions.cs b/src/Grpc.Extension/Options/GrpcServerOptions.cs
index 2372fd7..e384616 100644
--- a/src/Grpc.Extension/Options/GrpcServerOptions.cs
+++ b/src/Grpc.Extension/Options/GrpcServerOptions.cs
@@ -1,4 +1,5 @@
-using System;
+using Grpc.Core;
+using System;
using System.Collections.Generic;
using System.Text;
@@ -45,6 +46,11 @@ internal static GrpcServerOptions Instance
///
public int DefaultErrorCode { get; set; } = 1;
+ ///
+ /// ChannelOption
+ ///
+ public IEnumerable ChannelOptions { get; set; }
+
#region 兼容老版本
/*
///
diff --git a/src/Grpc.Extension/ServiceCollectionExtensions.cs b/src/Grpc.Extension/ServiceCollectionExtensions.cs
index 297cd2b..b4e3d4e 100644
--- a/src/Grpc.Extension/ServiceCollectionExtensions.cs
+++ b/src/Grpc.Extension/ServiceCollectionExtensions.cs
@@ -54,7 +54,7 @@ public static IServiceCollection AddGrpcClientExtensions(this IServiceCollection
services.AddSingleton();
services.AddSingleton();
//添加Channel的Manager
- services.AddSingleton();
+ services.AddSingleton();
services.AddSingleton();
//默认使用轮询负载策略,在外面可以注入其它策略
@@ -88,20 +88,22 @@ public static IServiceCollection AddGrpcClientExtensions(this IServiceCollection
///
///
///
- ///
- ///
+ /// Discovery的服务器地址
+ /// Discovery上客户端服务名字
+ /// ChannelOption
///
- public static IServiceCollection AddGrpcClient(this IServiceCollection services, string discoveryUrl, string discoveryServiceName) where T : ClientBase
+ public static IServiceCollection AddGrpcClient(this IServiceCollection services, string discoveryUrl, string discoveryServiceName, IEnumerable channelOptions = null) where T : ClientBase
{
services.AddSingleton();
var channelConfig = new ChannelConfig
{
DiscoveryUrl = discoveryUrl,
- DiscoveryServiceName = discoveryServiceName
+ DiscoveryServiceName = discoveryServiceName,
+ ChannelOptions = channelOptions
};
var bindFlags = BindingFlags.Static | BindingFlags.NonPublic;
channelConfig.GrpcServiceName = typeof(T).DeclaringType.GetFieldValue("__ServiceName", bindFlags);
- ChannelManager.Configs.Add(channelConfig);
+ ChannelPool.Configs.Add(channelConfig);
return services;
}