Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring cloud spring云数据流中的spring webflux流问题_Spring Cloud_Spring Webflux_Spring Cloud Stream - Fatal编程技术网

Spring cloud spring云数据流中的spring webflux流问题

Spring cloud spring云数据流中的spring webflux流问题,spring-cloud,spring-webflux,spring-cloud-stream,Spring Cloud,Spring Webflux,Spring Cloud Stream,我有一个定制的SpringCloud数据流源应用程序,它连接到一个rest端点,缓冲数据并发送到一个定制接收器。我也在使用SpringWebFlux。如果我做一个block,一切都正常收集所有可用的数据并将其发送到消息通道。问题是我需要将数据分块发送,从而缓冲流中的数据(比如100K记录的数据块)并发送到消息通道。现在,当我尝试进行缓冲并将数据块发送到消息通道时,失败了 工作代码(阻止调用以收集所有数据并立即发送) @InboundChannelAdapter( value=Source.OUT

我有一个定制的SpringCloud数据流源应用程序,它连接到一个rest端点,缓冲数据并发送到一个定制接收器。我也在使用SpringWebFlux。如果我做一个block,一切都正常收集所有可用的数据并将其发送到消息通道。问题是我需要将数据分块发送,从而缓冲流中的数据(比如100K记录的数据块)并发送到消息通道。现在,当我尝试进行缓冲并将数据块发送到消息通道时,失败了

工作代码(阻止调用以收集所有数据并立即发送)

@InboundChannelAdapter(
value=Source.OUTPUT
轮询器=@poller(fixedDelay=“120000”,maxMessagesPerPoll=“100000”)
public MessageSource sendEdpiMessageToChannel(){
List=WebClient.create()
.get()
.uri(builder->builder.scheme(“https”)
.host(“服务器名称”)
.path(“/api/endpoint”)
.build())
.header(“Cookie”,Cookie)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.flatMapMany(clientResponse->clientResponse.bodyToFlux(MyDataDTO.class))
.LIST()
.block();
return()->MessageBuilder.withPayload(list.build();
}        
现在我想缓冲相同的数据并发送它,而不是进行收集 阻止呼叫,但这是失败的

源代码

@计划(固定延迟=120000)
public MessageSource sendEdpiMessageToChannel(){
List=WebClient.create()
.get()
.uri(builder->builder.scheme(“https”)
.host(“服务器名称”)
.path(“/api/endpoint”)
.build())
.header(“Cookie”,Cookie)
.accept(MediaType.APPLICATION_JSON)
.exchange()
.flatMapMany(clientResponse->clientResponse.bodyToFlux(MyDataDTO.class))//.subscribeOn(Schedulers.parallel())
.缓冲区(100000)
.concatMap(streamRecordsList->Mono.fromRunnable(()->sendToChannel(streamRecordsList));
}
@内置通道适配器(
value=Source.OUTPUT
)
public MessageSource sendToChannel(列表)
{
return()->MessageBuilder.withPayload(list.build();
}
堆栈跟踪

2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]2019-09-16 06:27:47.859错误9---[scheduling-1]o.s.integration.handler.LoggingHandler:org.springframework.messagingement.MessagineException:调用方法失败;嵌套异常为java.lang.IllegalArgumentException:参数数错误 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.MethodInvokingMessageSource.doReceive(MethodInvokingMessageSource.java:117) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.AbstractMessageSource.receive(AbstractMessageSource.java:160) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:250) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:360) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.AbstractPollingEndpoint.PollformMessage(AbstractPollingEndpoint.java:329) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$null$1(AbstractPollingEndpoint.java:277) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.integration.endpoint.AbstractPollingEndpoint.lambda$createPoller$2(AbstractPollingEndpoint.java:274) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]在java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]在java.util.concurrent.FutureTask.run(FutureTask.java:266)上 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]位于java.lang.Thread.run(Thread.java:748) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]由以下原因引起:java.lang.IllegalArgumentException:参数数目错误 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 2019-09-16T02:27:47.860-04:00[APP/PROC/WEB/0][OUT]在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 20
@InboundChannelAdapter(
    value = Source.OUTPUT
    poller = @Poller(fixedDelay = "120000", maxMessagesPerPoll = "100000")
public  MessageSource<List<MyDataDTO>> sendEdpiMessageToChannel() {
List<MyDataDTO> list=WebClient.create()
    .get()
    .uri(builder -> builder.scheme("https")
    .host("server_name")
    .path("/api/endpoint")                  
    .build())
    .header("Cookie",cookie)
    .accept(MediaType.APPLICATION_JSON)
    .exchange()
    .flatMapMany(clientResponse -> clientResponse.bodyToFlux(MyDataDTO.class))      
    .collectList()
    .block();                      
 return ()->MessageBuilder.withPayload(list).build();
}        
@Scheduled(fixedDelay = 120000)
public  MessageSource<List<MyDataDTO>> sendEdpiMessageToChannel() {
List<MyDataDTO> list=WebClient.create()
    .get()
    .uri(builder -> builder.scheme("https")
    .host("server_name")
    .path("/api/endpoint")                  
    .build())
    .header("Cookie",cookie)
    .accept(MediaType.APPLICATION_JSON)
    .exchange()
    .flatMapMany(clientResponse -> clientResponse.bodyToFlux(MyDataDTO.class))//.subscribeOn(Schedulers.parallel())              
    .buffer(100000)
    .concatMap(streamRecordsList -> Mono.fromRunnable(()->sendToChannel(streamRecordsList));
}

@InboundChannelAdapter(
    value = Source.OUTPUT
)
public MessageSource<List<MyDataDTO>> sendToChannel(List<MyDataDTO> list ) 
{
    return ()->MessageBuilder.withPayload(list).build();
}
@Scheduled(fixedDelay = 120000)
public  MessageSource<List<MyDataDTO>> sendEdpiMessageToChannel() {
List<MyDataDTO> list=WebClient.create()
    .get()
    .uri(builder -> builder.scheme("https")
    .host("server_name")
    .path("/api/endpoint")                  
    .build())
    .header("Cookie",cookie)
    .accept(MediaType.APPLICATION_JSON)
    .exchange()
    .flatMapMany(clientResponse -> clientResponse.bodyToFlux(MyDataDTO.class))//.subscribeOn(Schedulers.parallel())              
    .buffer(100000)
    .concatMap(streamRecordsList -> Mono.fromRunnable(()->sendToChannel(streamRecordsList));
}

public void sendToChannel(List<MyDataDTO> list ) 
{
   this.source.output().send(MessageBuilder.withPayload(list).build());
}