0

我試圖運行一個「Hello,world」Spring Cloud數據流流,它基於一個非常簡單的例子http://cloud.spring.io/spring-cloud-dataflow/。我能夠創建一個簡單的源代碼和接收器,並使用Kafka在本地SCDF服務器上運行它,因此,在此之前,所有信息都是正確的,並且在SCDF指定的主題中生成和使用消息。Kubernetes/Spring雲數據流stream> spring.cloud.stream.bindings.output.destination被生產者忽略

現在,我試圖根據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),但在主題「輸出」中。我與接收器組件有類似的問題,它會在主題「輸入」中創建並期望消息。

nsource1 | log 

和集裝箱args作爲源有::

我使用儀表板創建的流定義源分量

--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年4月7日09:44:34593信息主要osicDirectChannel:81 - 通道「 application.output'有1個用戶。

問題是,如何正確覆蓋必須生成/使用消息的主題,或者使用哪些屬性和值來使這些工作在k8s上?

UPDATE:我使用的RabbitMQ

2017-04-07T12類似的問題:56:56:12 40.435405177Z 2017年4月7日40.435 INFO 7 --- [主要] osintegration。 channel.DirectChannel:頻道'application.output'有1個用戶。

回答

2

問題出在我的碼頭圖片上。我仍然不知道詳細信息,但使用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" ] 

,並開始工作。爲什麼這個例子說明了第一個入口點和爲什麼創建了兩個過程,這一定是有充分理由的,但其原因仍然超出了我的理解範圍。

0

您可以提供有關如何設置配置屬性的更多詳細信息嗎?該功能非常基本,所以這應該工作。如果您使用流定義進行設置,請使用流定義更新您的問題。

通道名稱保持'輸出',因爲這是應用程序在內部使用的。

+0

感謝您的回答,我添加了流的定義。 –

+0

由於圖像定義中的錯誤,服務器是否可以使用由SCDF在Pod中傳遞的參數?我跟着https://spring.io/guides/gs/spring-boot-docker/創建了映像,但我沒有找到應用程序啓動器源代碼。 –