部署 Spring 云数据流本地服务器

Deploying Spring Cloud Data Flow Local Server

作为初学者,我尝试按照 Getting Started with Manual Installation 中描述的步骤进行操作。

我可以下载并启动 Spring Cloud Data Flow 本地服务器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 可以看出,出了点问题。但作为初学者,我真的不知道如何继续或解决问题。

有什么想法吗?

查看此错误:

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)

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

消息代理是 Spring Cloud Stream 要求。这就是事件驱动的微服务如何通过发布-订阅语义相互通信。 Spring 云流 ref. guide.

中的更多详细信息

如果您想知道 SCDF 的作用,这里有一些背景资料:

SCDF 只是一种编排服务。当 SCDF 的本地实现部署流时,流中的应用程序作为独立的 Java 进程产生。它们是 Spring 启动应用程序。开始时,他们尝试使用底层活页夹实现库自动配置类路径。在您的示例中,您注册的应用程序与 rabbit-binder 捆绑在一起,并且由于它们未配置为连接到外部 RabbitMQ 集群,因此应用程序将尝试连接到默认连接属性(即 "localhost" 和默认 "port")。

您可以选择 RabbitMQ 或 Kafka,也可以 customize any of the out-of-the-box applications to communicate with other binder implementations

这是一个 example 用于在 SCDF 中使用 Apache Kafka 作为活页夹实现的情况。