<Kubernetes / Spring Cloud Dataflow流&gt;生产者

时间:2017-04-07 10:46:10

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

我试图运行一个&#34; Hello,world&#34; Spring Cloud数据流基于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中列出的说明在私有云中部署它。使用此部署,我可以部署一个简单的&#34;时间|登录&#34;开箱即用的流没有问题,但是我的例子失败了,因为生产者没有在创建pod时指定的主题中写入(例如,spring.cloud.stream.bindings.output.destination = ntest33.nites -source9)但在主题&#34;输出&#34;。我对sink组件有类似的问题,它在主题&#34; input&#34;中创建并期望消息。

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

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&#39; application.output&#39;有1个订阅者。

问题是,如何正确覆盖必须生成/消费消息的主题,或者使用什么属性和值来使其在k8s上运行?

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

  

2017-04-07T12:56:40.435405177Z 2017-04-07 12:56:40.435 INFO 7 --- [main] o.s.integration.channel.DirectChannel:Channel&#39; application.output&#39;有1个订阅者。

2 个答案:

答案 0 :(得分:2)

问题出在我的码头图片上。我仍然不知道详细信息,但使用Docker文件中https://spring.io/guides/gs/spring-boot-docker/实例化的2个进程中指示的Dockerfile,一个带有参数,另一个没有参数,这是具有正常运行时间并因此被使用的那个。 / p>

解决方案是替换

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

使用

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

它开始工作了。必须有一个很好的理由说明为什么示例表明第一个入口点以及为什么创建了2个进程,但原因仍然是我无法理解的。

答案 1 :(得分:0)

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

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