公共交通中请求客户端和 RoutingSlip 快递的典型用法的差异

问题描述 投票:0回答:1

我知道对于分布式和顺序服务,我们正在使用 RoutingSlip courier。想象一下,我有一个场景,我想要一个请求发布者,我们将其命名为 apiPublisher,它想要调用 dbMicro 来获取一些数据,然后调用另一个 Micro 来做一些事情,然后调用 dbmicro 在那里插入新数据,最后返回回复我的出版商。所以我要创建一个路线和类似的活动:

 private RoutingSlip CreateRoutingSlip(ConsumeContext<AccountModel> context)
            {
                var builder = new RoutingSlipBuilder(NewId.NextGuid());
                builder.AddSubscription
                    (context.ReceiveContext.InputAddress,
                        RoutingSlipEvents.Completed
                        | RoutingSlipEvents.Faulted);
                builder.AddVariable("AccountId", context.Message.AccountId);
                builder.AddVariable(nameof(context.RequestId), context.RequestId);
                builder.AddVariable(nameof(context.ResponseAddress), context.ResponseAddress);
                builder.AddVariable(nameof(context.FaultAddress), context.FaultAddress);
                builder.AddVariable("Request", context.Message);
                var dbQueueName = _formatter.
                    ExecuteActivity<SetAuthenticatedRequestWithDbActivity, AccountModel>();
    
                builder.AddActivity(nameof(SetAuthenticatedRequestWithDbActivity)
                    , new Uri($"queue:{dbQueueName}"), new
                {
                        AccountId = context.Message.AccountId,                
                });
                var apiQueueName = _formatter.ExecuteActivity<CallCampaignTpTestMicro, SpecialOfferActivePackageRequestModel>();
                builder.AddActivity("specialOffer", new Uri($"queue:{apiQueueName}"), new
                {
                    TelNum = "09195847189",
                    OfferId = "1",
                    ChoiceNo = "1",
    
                    Gateway = context.Message.Gateway,
                    HeaderNo = "1",
                    ChannelId = "1",
                });
                //next activity ...
                var dbResult = new AccountModel()
                {
                    AccountId = context.Message.AccountId,               
                };
                builder.AddVariable("Model", dbResult);
                return builder.Build();
            }

现在我想知道如果我只是简单地在调用对方之后在消费者中调用每个这个微控制器有什么区别,例如这样做:

var massResult= await _massClientRequest.GetResponse<AuthenticatePaymentResponeModel>
                (new AuthenticatePaymentRequestModel
                {
                    AccountRequest = context.Arguments.AccountRequest,
                    MyRequestedUrl = context.Arguments.MyRequestedUrl,
                    UserId = context.Arguments.UserId,                    

                });
            var res = massResult.Message;
var nextMasResult  =  await _massClientRequest.GetResponse<PaymentBankResponseModel>
               (new PaymentBankRequestModel
               {
                   BankeName = bankeName,
                   MyRequestUrl = context.Arguments.MyRequestUrl,
                   NewUrl = context.Arguments.NewUrl,
               });
 var 2ndRes= nextMasResult.Message;
if (2ndRes.IsSuccess){
var lastMasResult  =  await _massClientRequest.GetResponse<mymodel>
               (new mymodelReq
               {
                   BankeName = bankeName,
                   MyRequestUrl = context.Arguments.MyRequestUrl,
                   NewUrl = context.Arguments.NewUrl,
               });

这个场景是不是运行得不太顺利?第一种方法有什么好处。

microservices masstransit routing-slip masstransit-courier
1个回答
0
投票

路由滑动模式是一个saga(在本文的原始意义上),它提供了额外的功能,包括:

  • 先前执行的路由单活动的补偿
  • 由于消息减少,消息延迟减少,每增加一项活动就会减少一条消息
  • 根据活动动态改变行程,以便行为可以对争论内容做出反应

还有一个

RoutingSlipRequestProxy
RoutingSlipResponseProxy
可用于为路由单交易提供标准请求客户端入口点。这允许原始 API 使用请求客户端发起事务,然后将该事务的成功/失败作为结果/错误组合(或结果/不良结果对)进行处理。

© www.soinside.com 2019 - 2024. All rights reserved.