当前位置: 首页 > 知识库问答 >
问题:

积分流中的反应Spring积分接入通量

丌官绍元
2023-03-14

我已经看到了在IntegrationFlow中间访问通量的问题,我想知道为什么我用以下方式成功地在通量中编写逻辑:

public void writeToSolr(IntegrationFlowDefinition<?> flowDefinition) {
    flowDefinition
        .bridge(e -> e.reactive(flux -> a ->
           flux.log("write to solr")
               .flatMap(writeToSolr)
               .subscribe()));
}

首先,我想知道为什么我从未将错误抛出控制台,但在调试时我看到了错误。我还想知道这是如何工作的,为什么我需要a变量(它总是产生NullPointerException,即使流可以继续并正常工作)。当我省略变量时:

public void writeToSolr(IntegrationFlowDefinition<?> flowDefinition) {
    flowDefinition
        .bridge(e -> e.reactive(flux ->
           flux.log("write to solr")
               .flatMap(writeToSolr)
               .subscribe()));
}

我在lambda表达式中得到了一个异常错误的返回类型:无法将Dispossible转换为Publisher


共有1个答案

陈哲
2023-03-14

您在该e.reactive()中编写的逻辑不正确。请参阅留档以了解endpoint配置程序选项的用途:

/**
 * Make the consumer endpoint as reactive independently of an input channel and
 * apply the provided function into the {@link Flux#transform(Function)} operator.
 * @param reactiveCustomizer the function to transform {@link Flux} for the input channel.
 * @return the spec
 * @since 5.5
 */
public S reactive(Function<? super Flux<Message<?>>, ? extends Publisher<Message<?>>> reactiveCustomizer) {

https://docs.spring.io/spring-integration/docs/current/reference/html/dsl.html#java-dsl反应

在此配置器中,您无法执行诸如flatMap()之类的“活动”操作。您完全消除了流的目的。必须在下游处理程序中完成flatMap。这样的桥梁没有任何意义。它只是将当前的流动状态转变为无功状态。当handle()与类似的reactive()配置程序将执行相同的操作,但也将应用此处理程序的一个用途-其句柄部分。

。subscribe()在那里完全不正确。让框架在Spring集成的基础上处理提供的反应流!这就是为什么你用flux来误导自己-

writeSolr可以这样使用:

flowDefinition
    .channel(c -> c.flux())
    .handle(new ReactiveMessageHandlerAdapter((message) -> writeToSolr(message.getPayload())))

我想我们将修改endpoint的reactive(),只公开那些仅用于配置的Flux运算符。其余的不在当前endpoint配置中:必须在目标处理程序方法逻辑中完成。

此外,我认为我们可以引入handleReactive(ReactiveMessageHandler)作为IntegrationFlow的终端操作符,以简化ReactiveMessageHandlerAdapter的用法。

 类似资料:
  • 积分部分 获取积分配置 积分流水 发起充值 取回凭据 充值回调 发起提现 发起 IAP(in-App Purchase) 充值 验证 IAP 订单 获取苹果IAP商品列表 积分商城(待开发) IAP帮助页面 获取积分配置 GET /currency 响应 Http Status 200 { "recharge-ratio": 1, "recharge-options": "100, 5

  • API文档 接口说明 该接口由开发者服务端开放给兑吧 接口需求背景 为了优化积分商城内部的积分流通,提高用户的参与度,兑吧新增了多个积分运营场景,如:带有博弈性质的加减积分小游戏和连续签到加积分,这些运营场景都需要使用到开发者加积分接口。 接口流程说明 当用户在积分商城达成加积分的条件后,兑吧服务端会给上述配置的接口发送加积分请求,请求会带上加积分相关的必要信息,开发者收到请求后需生成订单、记录兑

  • API文档 常见问题 接口说明 该接口由开发者开放给兑吧 当用户发起兑换请求后,兑吧将会创建一个订单,并发送一条该用户对应的扣积分请求给开发者。 这个请求会包含用户id,兑吧订单号,消耗的积分数,兑换类型等等信息。开发者收到该请求后,请自行在系统中创建订单,并记录请求中的相关信息,同时执行用户积分扣除行为。 如果扣除成功,写入成功的参数和开发者系统的订单号,返回这个响应给兑吧。 如果扣除失败,写入

  • 积分 对接适用于开发者已完成由账号对接,希望用户在变现产品中可以使用在自有产品的积分进行相关订单支付。 实现步骤如下: 用户在进入支付结算页面之前,变现猫调用接口7.1查询当前用户在App的积分值。 在扣除积分时,变现猫先从开发者预充款中预扣相应金额。然后调用7.2接口向开发申请扣除积分,开发者执行用户帐目扣除积分后通知变现猫是否扣除成功。 变现猫收到开发者的扣除积分结果通知后执行后续动作。若网络

  • 我试图用Spring集成公开rest API,并大摇大摆地记录它。有可能吗?我找不到任何文档或例子来使它工作。 我的大摇大摆的目录豆: 和简单的流程: 我使用spring Boot:2.0.1和springfox-swagger2:2.8.0 提前感谢,马特乌斯

  • 删除动态 申请动态置顶 申请动态评论置顶 通过评论置顶 拒绝评论置顶 删除动态 DELETE /feeds/:feed/currency Response Status: 204 No Content 申请动态置顶 POST /feeds/:feed/currency-pinneds Input 名称 类型 描述 amount Integer 必须,置顶总价格,积分。 day Integer