Kubernetes/Spring Cloud Dataflow 流 > spring.cloud.stream.bindings.output.destination 被生产者忽略

Kubernetes/Spring Cloud Dataflow stream > spring.cloud.stream.bindings.output.destination is ignored by producer

我正在尝试 运行 "Hello, world" Spring Cloud Data Flow 基于 http://cloud.spring.io/spring-cloud-dataflow/ 中解释的非常简单的示例。我能够使用 Kafka 在我的本地 SCDF 服务器上创建一个简单的源和接收器并运行它,所以直到这里一切都是正确的并且消息在 SCDF 指定的主题中生成和使用。

现在,我正尝试根据 http://docs.spring.io/spring-cloud-dataflow-server-kubernetes/docs/current-SNAPSHOT/reference/htmlsingle/#_getting_started 中列出的说明将其部署到我的私有云中。使用此部署,我能够毫无问题地部署一个简单的 "time | log" 开箱即用流,但是我的示例失败了,因为生产者没有在创建 pod 时指定的主题中写入(例如, spring.cloud.stream.bindings.output.destination=ntest33.nites-source9) 但在主题 "output" 中。我对接收器组件也有类似的问题,它在主题 "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()));
}

而且在日志里我看得很清楚

2017-04-07T09:44:34.596842965Z 2017-04-07 09:44:34,593 INFO main o.s.i.c.DirectChannel:81 - Channel 'application.output' has 1 subscriber(s).

问题是,如何正确覆盖必须包含消息的主题 produced/consumed 或使用什么属性和值才能在 k8s 上运行?

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

2017-04-07T12:56:40.435405177Z 2017-04-07 12:56:40.435 INFO 7 --- [ main] o.s.integration.channel.DirectChannel : Channel 'application.output' has 1 subscriber(s).

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

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

问题出在我的 docker 图片上。我仍然不知道细节,但使用 https://spring.io/guides/gs/spring-boot-docker/ 处指示的 Dockerfile 在 docker 容器中实例化了 2 个进程,一个有参数,另一个没有,这是一个有正常运行时间的,因此被使用.

解决方案是更换

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

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

它开始工作了。该示例指示第一个入口点以及创建 2 个进程的原因一定是有充分理由的,但原因仍然超出我的理解范围。