Docker Kubernetes/Spring云数据流>;生产者忽略spring.cloud.stream.bindings.output.destination

Docker Kubernetes/Spring云数据流>;生产者忽略spring.cloud.stream.bindings.output.destination,docker,kubernetes,spring-cloud-stream,spring-cloud-dataflow,Docker,Kubernetes,Spring Cloud Stream,Spring Cloud Dataflow,我正在尝试运行一个“Hello,world”Spring云数据流,它基于在中解释的非常简单的示例。我能够创建一个简单的源和接收器,并使用Kafka在本地SCDF服务器上运行它,所以在这里之前,一切都是正确的,消息都是在SCDF指定的主题中生成和使用的 现在,我正试图根据中列出的说明在我的私有云中部署它。使用此部署,我能够部署一个简单的开箱即用的“time | log”流,没有任何问题,但我的示例失败了,因为生产者没有在创建pod时指定的主题(例如spring.cloud.stream.bindi

我正在尝试运行一个“Hello,world”Spring云数据流,它基于在中解释的非常简单的示例。我能够创建一个简单的源和接收器,并使用Kafka在本地SCDF服务器上运行它,所以在这里之前,一切都是正确的,消息都是在SCDF指定的主题中生成和使用的

现在,我正试图根据中列出的说明在我的私有云中部署它。使用此部署,我能够部署一个简单的开箱即用的“time | log”流,没有任何问题,但我的示例失败了,因为生产者没有在创建pod时指定的主题(例如spring.cloud.stream.bindings.output.destination=ntest33.nites-source9)中写入,而是在主题“output”中写入。我对sink组件也有类似的问题,它在主题“input”中创建并期望消息

我使用仪表板创建了流定义:

nsource1 | log
源的和容器参数为:

--spring.cloud.stream.bindings.output.producer.requiredGroups=ntest34
--spring.cloud.stream.bindings.output.destination=ntest34.nsource1
源组件的代码段为 包xxxx

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.context.annotation.Bean;
import org.springframework.integration.annotation.InboundChannelAdapter;
import org.springframework.integration.core.MessageSource;
import org.springframework.messaging.support.GenericMessage;

@SpringBootApplication
@EnableBinding(Source.class)
public class HelloNitesApplication
{
public static void main(String[] args)
{
    SpringApplication.run(HelloNitesApplication.class, args);
}

@Bean
@InboundChannelAdapter(value = Source.OUTPUT)
public MessageSource<String> timerMessageSource()
{
    return () -> new GenericMessage<>("Hello " + new SimpleDateFormat().format(new Date()));
}
import java.text.simpleDataFormat;
导入java.util.Date;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
导入org.springframework.cloud.stream.annotation.EnableBinding;
导入org.springframework.cloud.stream.messaging.Source;
导入org.springframework.context.annotation.Bean;
导入org.springframework.integration.annotation.InboundChannelAdapter;
导入org.springframework.integration.core.MessageSource;
导入org.springframework.messaging.support.GenericMessage;
@SpringBoot应用程序
@EnableBinding(Source.class)
公共类应用程序
{
公共静态void main(字符串[]args)
{
run(hellonisapplication.class,args);
}
@豆子
@InboundChannelAdapter(值=Source.OUTPUT)
public MessageSource timerMessageSource()
{
return()->new GenericMessage(“Hello”+new SimpleDateFormat().format(new Date());
}
在日志中我可以清楚地看到

2017-04-07T09:44:34.596842965Z 2017-04-07 09:44:34593信息主o.s.i.c.直接频道:81-频道“应用程序.输出”有一个订户

问题是,如何正确覆盖必须在哪里生成/使用消息的主题,或者使用什么属性和值在k8s上工作

更新:我在使用RabbitMQ时遇到了类似的问题

2017-04-07T12:56:40.435405177Z 2017-04-07 12:56:40.435信息7---[main]o.s.integration.channel.DirectChannel:channel“application.output”有一个订户


您能否提供有关如何设置该配置属性的更多详细信息?该功能非常基本,因此应该可以使用。如果您使用流定义来设置它,请使用流定义更新您的问题


通道名称保留为“output”,因为这是应用程序内部使用的名称。

您能否提供有关如何设置该配置属性的更多详细信息?该功能非常基本,因此应该可以使用。如果您使用流定义来设置它,请使用流定义更新您的问题


通道名称仍然是“output”,因为这是应用程序内部使用的。问题出在我的docker映像上。我仍然不知道细节,但使用docker容器中实例化的2个进程指示的Dockerfile,一个带有参数,另一个没有,这是一个有正常运行时间的进程,因此正在运行用过

解决办法是替换

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]


它开始工作了。这个例子指出了第一个入口点和为什么创建了两个进程,肯定有很好的原因,但原因仍然超出我的理解。

问题在于我的docker映像。我仍然不知道细节,但使用docker容器中实例化的两个进程中指示的Dockerfile,一个有参数,另一个没有,这是一个正常运行时间,因此被使用

解决办法是替换

ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]


它开始工作了。这个例子指出了第一个入口点以及为什么创建了两个进程,肯定有一个很好的原因,但原因仍然超出了我的理解。

谢谢你的回答,我添加了流定义。是否可能由于ima中的错误,SCDF在pod中传递的参数没有被服务使用ge定义?我随后创建了图像,但没有找到应用程序启动程序的源代码。感谢您的回答,我添加了流定义。是否可能由于图像定义中的错误,SCDF在pod中传递的参数未被服务使用?我随后创建了图像,但我没有找到应用程序初学者的源代码是如何完成的。