部署 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 作为活页夹实现的情况。
作为初学者,我尝试按照 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 作为活页夹实现的情况。