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

标签 docker kubernetes spring-cloud-stream spring-cloud-dataflow

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

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

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

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).



问题是,如何正确覆盖必须生成/使用消息的主题或使用什么属性和值来使其在 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).

最佳答案

问题出在我的 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 个进程肯定有充分的理由,但原因仍然超出我的理解。

关于docker - Kubernetes/Spring Cloud Dataflow 流 > spring.cloud.stream.bindings.output.destination 被生产者忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43276183/

相关文章:

node.js - 使用 docker-compose 将 NodeJS-App 连接到 MongoDB

java - 是否可以在 DockerComposeContainer 的 docker-compose 文件中使用本地 Docker 镜像?

docker - openshift使用uid 101运行所有容器,而不是从项目范围获取uid

java - Spring Cloud Stream (Hoxton) Kafka 生产者/消费者无法与 EmbeddedKafka 进行集成测试

spring-boot - EmbeddedKafka kafka streams 用SpringBootTest测试发现两个StreamsBuilderFactoryBeans

python - cv2.VideoCapture 在 docker 容器中不起作用

linux - 无法在亚马逊Linux实例上安装docker

json - 使用JQ(YQ)添加/删除k8s入口 list 中的后端 block

kubernetes - 如何在重启策略设置为始终的情况下删除 Openshift 中的 pod?

java - Spring Cloud Stream Kafka 生产者消息