作为初学者,我尝试遵循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中看到出了点问题。但是作为一个初学者,我真的不知道如何继续或解决该问题。
有什么想法吗?
答案 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。