Kubernetes / Spring云数据streamstream> spring.cloud.stream.bindings.output.destination被生产者忽略

我试图运行一个基于http://cloud.spring.io/spring-cloud-dataflow/上解释的非常简单的例子的“Hello,world”Spring云数据stream。 我能够创build一个简单的源代码和接收器,并使用Kafka在我的本地SCDF服务器上运行它,因此,在此之前,所有内容都是正确的,并且在SCDF指定的主题中生成和使用消息。

现在,我正在尝试根据http://docs.spring.io/spring-cloud-dataflow-server-kubernetes/docs/current-SNAPSHOT/reference/htmlsingle/#中列出的说明将其部署到我的私有云中_getting_started 。 使用这个部署,我可以毫无问题地部署一个简单的“time | log”开箱即用的stream,但是我的示例失败了,因为生产者没有写入创buildpod时指定的主题(例如,spring.cloud.stream.bindings.output.destination = ntest33.nites-source9),但在主题“输出”。 我有一个与接收器组件类似的问题,它在“input”主题中创build并期望消息。

我使用仪表板创build了stream定义:

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())); } 

在日志中,我可以清楚地看到

2017-04-07T09:44:34.596842965Z 2017-04-07 09:44:34,593 INFO main osicDirectChannel:81 – Channel'application.output'有1个用户。

问题是,如何恰当地覆盖必须产生/消耗消息的主题,或者使用什么属性和值来使这个工作在K8上?

更新:我有使用RabbitMQ类似的问题

2017-04-07T12:56:40.435405177Z 2017-04-07 12:56:40.435信息7 — [main] osintegration.channel.DirectChannel:Channel'application.output'有1个用户。

问题是我的docker形象。 我仍然不知道详细信息,但是使用在https://spring.io/guides/gs/spring-boot-docker/中指出的Dockerfile在Docker容器中实例化了两个进程,一个是参数,另一个是没有的,是正常运行时间,因此正在使用&#x3002;

解决的办法是更换

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

 ENTRYPOINT [ "java", "-jar", "/app.jar" ] 

它开始工作。 为什么这个例子表明了第一个入口点和为什么创build了2个进程,这是一个很好的理由,但其原因仍然超出了我的理解范围。

你能提供更多关于你如何设置configuration属性的细节? 这个function是非常基本的,所以这应该工作。 如果您正在使用stream定义进行设置,请使用stream定义更新您的问题。

频道名称保持“输出”,因为这是应用程序内部使用的。