.NetCore集成Dapr踩坑经历
2021-05-02 14:28
标签:null art download 构造方法 str github ons rgs 比较 该篇内容由个人博客点击跳转同步更新!转载请注明出处 之前自己有个core2.2的项目一直是用的Surging作为微服务框架的,后来了解到了Dapr,发现比较轻量级,开发部署等也非常方便,故将自己的程序升级到了3.0同时框架改成了Dapr,网上查到的好多Dapr文章基本都是大差不同,大都是用的GIT上的示例或者是直接文章翻译很少有提到实战上的一些问题,下面我把我自己遇到的一些问题和解决方法记录一下同时大致讲下安装集成步骤。 下载dotnet-sdk(Nuget上暂时只有预览版,所以直接用源码集成方便源码调试) 注意:安装dapr cli的时候他会让你用 一段powershell脚本安装,但由于国内墙的问题使用不了所以需要xxxxemmmm,另一个办法就是直接去release下载文件https://github.com/dapr/cli/releases 具体安装命令步骤啥的不说了,链接点击过去都有介绍 具体的如何集成和配置网上都有大家可以看下这篇GIT上的集成步骤,我这里直接给大家看下我示例程序的项目结构重要的内容会写在括号里 具体项目依赖如下图 由于目标计算机积极拒绝,无法连接。 这是由于dotnet-sdk默认调用的端口是3500但你通过Darp运行的程序端口是随机的所以运行的时候需要指定一个端口通过 -port xx,例如: 或者通过指定程序调用的端口通过设置 ERR_INVOKE_ACTOR 这是由于作者在程序中少写了这个状态应该算个bug我提交了issue但还没回我,具体的在DaprErrorCodes文件中最后加一下就行 Actor服务中如何使用依赖注入 对于这个问题有两个解决方法: 在startup > configure 中赋值 在Actor服务中使用 需要注意的点 1.Actor服务中的每个方法最多只能有一个参数,多个参数的话都变成写成一个实体进行传递,不然会报错 Dapr提供了一个可视化界面 dashboard 这个暂时有点问题,谷歌打不开,但edge可以,貌似是Angular的BUG,所以推荐大家暂时不要用,因为功能很少不如直接dapr cli方便 大致的问题就如上面这些,但我记得还有几个隔了一天年纪太大忘光了,后续有新问题我会继续更新。不要问我dapr和其它微服务框架比效率性能哪个好,我也没试过。这玩意儿既然是微软开源的我想也不会太差,而且有专业的团队维护,不出太大意外我想发展肯定是越来越好的。 .NetCore集成Dapr踩坑经历 标签:null art download 构造方法 str github ons rgs 比较 原文地址:https://www.cnblogs.com/ShaoJianan/p/NetCore.html前言
前期准备
大致集成步骤
错误内容和解决方法
ERROR: DaprHttpInteractor: System.Net.Http.HttpRequestException: 由于目标计算机积极拒绝,无法连接。
---> System.Net.Sockets.SocketException (10061): 由于目标计算机积极拒绝,无法连接。
dapr run --port 3500 --app-id demo_actor --app-port 5000 dotnet run
DAPR_HTTP_PORT
的环境变量来指定程序调用端口
Error converting value "ERR_INVOKE_ACTOR" to type 'System.Nullable
可以在注册actor的时候提供你所需要的东西,如下public static IWebHostBuilder CreateHostBuilder(string[] args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup
public class ServiceLocator
{
public static IServiceProvider Current { get; set; }
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
ServiceLocator.Current = app.ApplicationServices;
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHsts();
}
public RedisCachesService(ActorService actorService, ActorId actorId) : base(actorService, actorId)
{
using (var scoped=ServiceLocator.Current.CreateScope())
{
_cr = scoped.ServiceProvider.GetService
结语
微信关注我哦!(转载注明出处)