关于commandResult和Completable用法小笔记

要在处理完成后追加一个Delete处理:

    @Nonnull
    @Override
    public Single<CommandResult> execute(@Nonnull PaymentUnallocateRequest request) {
        return validatorRegistry.getValidator(commandIdentity()).validate(request).switchIfEmpty(Single.defer(
            () -> paymentUnallocateActivityWrite(request).flatMap(
                paymentRequest -> createPaymentActivityLink(paymentRequest).flatMapSingle(
                        activityLink -> paymentUnallocateActivityApply(paymentRequest, activityLink,
                            request.getBillingViewLink()).flatMap(
                                a -> billingPaymentService.extractActivity(EntityLinkUtil.getId(activityLink), paymentRequest))
                            .flatMap(
                                activity -> paymentUnallocateActivityComplete((PaymentActivity) activity, paymentRequest)))
                    .flatMap(commandResult -> publishEventIfUnallocateDeleteMemberRecord(paymentRequest)))));
    }

    private Single<commandResult> publishEventIfUnallocateDeleteMemberRecord(BillingPaymentRequest request) {
        return Single.jues( eventPublisher.publishEventAsync(paymentEventFactory.createDeleteMemberRecordIndexEvent(request)).map(deletrMemberRecordIndexEvent -> commandResult);
    }

如上修改,发现因为没有地方订阅commandResultpublishEventAsync并没有被push,Kafka上没有发出消息。publishEventAsync return了Completable但是没有调用这个线程,我只返回了commandResult,但是commandResult并没有被订阅。

改成如下代码后,可正常push:

    public Single<CommandResult> execute(@Nonnull PaymentUnallocateRequest request) {
        return validatorRegistry.getValidator(commandIdentity()).validate(request).switchIfEmpty(Single.defer(
            () -> paymentUnallocateActivityWrite(request).flatMap(
                paymentRequest -> createPaymentActivityLink(paymentRequest).flatMapSingle(
                        activityLink -> paymentUnallocateActivityApply(paymentRequest, activityLink,
                            request.getBillingViewLink()).flatMap(
                                a -> billingPaymentService.extractActivity(EntityLinkUtil.getId(activityLink), paymentRequest))
                            .flatMap(
                                activity -> paymentUnallocateActivityComplete((PaymentActivity) activity, paymentRequest)))
                    .flatMap(commandResult -> publishEventIfUnallocateDeleteMemberRecord(paymentRequest).andThen(
                        Single.just(commandResult))))));
    }
    private Completable publishEventIfUnallocateDeleteMemberRecord(BillingPaymentRequest request) {
        return eventPublisher.publishEventAsync(paymentEventFactory.createDeleteMemberRecordIndexEvent(request));
    }

重点在于commandResult有没有被正确的订阅

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值