部署Spring Cloud Data Flow Local Server

时间:2019-01-08 18:32:19

标签: spring-cloud-dataflow

作为初学者,我尝试遵循Getting Started with Manual Installation中描述的步骤。

我可以下载并启动 Spring Cloud Data Flow Local Server Spring Cloud Data Flow Shell

然后我继续Deploying Streams

Welcome to the Spring Cloud Data Flow shell. For assistance hit TAB or type "help".
dataflow:>app register --name http --type source --uri maven://org.springframework.cloud.stream.app:http-source-rabbit:1.2.0.RELEASE
Successfully registered application 'source:http'
dataflow:>app register --name log --type sink --uri maven://org.springframework.cloud.stream.app:log-sink-rabbit:1.1.0.RELEASE
Successfully registered application 'sink:log'

然后我尝试使用以下方法创建流:

dataflow:>stream create --name httptest --definition "http --server.port=9000 | log" --deploy
Created new stream 'httptest'
Deployment request has been sent

然后发送一些数据,失败:

dataflow:>http post --target http://localhost:9000 --data "hello world"
> POST (text/plain) http://localhost:9000 hello world
> 500 INTERNAL_SERVER_ERROR
> 500 INTERNAL_SERVER_ERROR
{
  "exception" : "org.springframework.messaging.MessageHandlingException",
  "path" : "/",
  "error" : "Internal Server Error",
  "message" : "error occurred in message handler [org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint@20eacb00]; nested exception is org.springframework.amqp.AmqpConnectException: java.net.ConnectException: Connection refused (Connection refused)",
  "timestamp" : 1546968872545,
  "status" : 500
}
Error sending data 'hello world' to 'http://localhost:9000'

我从日志应用程序的log file中看到出了点问题。但是作为一个初学者,我真的不知道如何继续或解决该问题。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

正在查看此错误:

  

消息处理程序[org.springframework.integration.amqp.outbound.AmqpOutboundEndpoint@20eacb00]中发生错误;嵌套的异常是org.springframework.amqp.AmqpConnectException:java.net.ConnectException:连接被拒绝(连接被拒绝)

似乎您没有在本地运行RabbitMQ。部署流后,如果现在启动RabbitMQ实例,则应用程序将自动恢复并连接到该实例。然后,您将看到应用程序的成功部署,并且POST也应最终可以工作。

消息代理是Spring Cloud Stream 要求。这就是事件驱动的微服务通过pub-sub语义相互通信的方式。 Spring Cloud Stream ref. guide中的更多详细信息。

如果您想知道SCDF的作用,请参考以下背景:

SCDF仅仅是一种编排服务。当SCDF的Local实现部署流时,流中的应用程序将作为独立的Java进程生成。它们是Spring Boot应用程序。开始时,他们尝试使用基础的绑定器实现库自动配置类路径。在您的示例中,您注册的应用程序与Rabbit-binder捆绑在一起,并且由于未将其配置为连接到外部RabbitMQ集群,因此这些应用程序将尝试连接到默认的连接属性(即“ localhost”和默认的“港口”)。

您可以在RabbitMQ或Kafka之间进行选择,也可以customize的任何现成应用程序与其他binder implementations进行通信。

在使用Apache Kafka作为SCDF中的绑定器实现时,这里是example