千万级秒杀系统-3.基础设施层Consul注册落地
项目架构
基础设施层创建
引入nuget包因为使用abp改造基础实施层所以引入abp相关及consul注册
<PackageReference Include="Consul" Version="1.6.10.9" />
<PackageReference Include="Volo.Abp.Autofac" Version="4.4.3" />
<PackageReference Include="Volo.Abp.Core" Version="4.4.3" />
创建consul服务注册及发现通用代码。(由于代码有点多所以这里贴上gitee仓库地址)
创建InfrastructureModule
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/15 15:16:24
*----------------------------------------------------------------*/
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Autofac;
using Volo.Abp.Modularity;
using WBC.Microservices.Infrastructure.Registry.Extentions;
namespace WBC.Microservices.Infrastructure
{
[DependsOn(typeof(AbpAutofacModule))]
public class InfrastructureModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
IHostEnvironment hostEnvironment = context.Services.GetSingletonInstance<IHostEnvironment>();
context.Services.AddServiceRegistry();
//base.ConfigureServices(context);
}
}
}
以用户微服务为例进行注册其他微服务同理
1、添加项目引用
2、在UserHttpApiHostModule中使用
3、服务注册
// consul注册
Configure<ServiceRegistryOptions>(options =>
{
options.ServiceId = Guid.NewGuid().ToString();
options.ServiceName = configuration["ConsulRegistry:ServiceName"];
options.ServiceAddress = Environment.GetEnvironmentVariable("ASPNETCORE_URLS") != null ? Environment.GetEnvironmentVariable("ASPNETCORE_URLS") : configuration["ConsulRegistry:ServiceAddress"];
options.HealthCheckAddress = configuration["ConsulRegistry:HealthCheckAddress"];
options.RegistryAddress = configuration["ConsulRegistry:RegistryAddress"];//"http://localhost:8500";
});
//心跳检测
context.Services.AddHealthChecks();
4、开启心跳检测中间件
//心跳检测
app.UseHealthChecks("/HealthCheck");
5、appsettings.json配置Consul信息
"ConsulRegistry": {
"ServiceName": "userservices",
"RegistryAddress": "http://localhost:8500",
"HealthCheckAddress": "/HealthCheck"
}
6、重新生成项目并执行进行测试是否能够注册成功及注销