SCDF:我可以使用外部微服务作为源吗?

时间:2017-06-28 13:21:09

标签: spring microservices spring-cloud-dataflow spring-rabbitmq

我正在努力解决工作流程如下的解决方案:

  • 用户点击微服务上传图片
  • 微服务重复删除图像,如果它真的是新的,则将其排队等待处理
  • 处理链存在于Spring Cloud Dataflow

微服务已经存在,我们正在尝试扩展它以进行奇特的处理。我最初的切入是使用样本入门包中的Http Source,因为这是我不必创建的东西。问题是源没有向Spring Discovery服务器注册自己,因此没有做出总体假设就没有办法得到终点(就像它存在于端口XYZ的数据流服务器上一样)。

我们可以创建一个Queue端点,并直接将数据发送到接收外部事件的Queue源,并将其转发到SCDF队列。

如果DataFlow可以为我连接队列的开头,而不将微服务作为源重新打包,那将是多么棒的。

Spring Data Flow的主要问题是它在服务器启动时不会自动启动已部署的流,我们需要合理地确定微服务始终处于运行状态。

2 个答案:

答案 0 :(得分:0)

服务器的生命周期与其部署的应用程序分离,这是故意的。

我没有按照您对数据流如何连接队列开头的想法,但根据您的描述,您可以执行以下操作:

您需要修改应用程序才能在eureka上注册,但这是一个非常简单的操作,只需几行代码:

  1. 您可以从流应用视角开始:https://start-scs.cfapps.io/,选择http源,您的活页夹,然后在Main添加spring-cloud-netflix库以及@EnableDiscoveryClient引导课程

  2. http://start.spring.io开始选择Stream Rabbit或Stream Kafka,添加Web和netflix库,然后添加@EnableDiscoveryClient@EnableBinding注释并创建一个简单的HTTP端点供您使用情况下。

  3. 无论如何应该是一个小小的补充。

    你也可以在https://github.com/spring-cloud-stream-app-starters/http/issues打开一个问题,建议我们将@EnableDiscoveryClient添加到http源应用程序中,我们也可以考虑下一次迭代。

答案 1 :(得分:0)

我会尝试澄清几点。

  

上传图片 - >如果真的是新的 - >排队等待处理

在新的上传活动中,您需要处理图片。这里是similar use-case,但更多的是实时流媒体样式解决方案。这不是你想要做的,但我认为它可能有用。

将图像处理代码移植到Spring Cloud Stream应用程序就像添加@EnableBinding(Processor.class)一样简单。它是相同的业务逻辑 - 无论您是单独运行它还是通过SCDF编排它,它仍然仍然是一个独立的微服务。但是,SCDF希望它是Source,Processor,Sink或Task应用程序类型。我们将打开它以支持任意的"功能" (lambdas)将来发布。

  

我们可以创建一个Queue端点,并直接将数据发送到接收外部事件的Queue源,并将其转发到SCDF队列。

这是标准解决方案之一。您可以直接使用队列/主题中的新事件(图像),并在我们在上一步中创建的图像处理器中处理它。 DSL中的named-channel support只能促进这一点。

  

如果DataFlow可以为我连接队列的开头,而不将微服务作为源重新打包,那将是多么棒的。

我不确定我明白这一点。如果我假设,你正在寻找"命名频道"作为源和支持。

  

Spring Data Flow的主要问题是它在服务器启动时不会自动启动已部署的流,我们需要合理地确定微服务始终处于运行状态。

当您在SCDF中部署Stream时,DSL中包含的所有单个步骤(即流定义)都将作为目标运行时中的独立应用程序(云代工厂,kubernetes等)进行解析和部署。部署后,将其留给运行应用程序以进行生命周期管理的平台。 SCDF不保留或跟踪应用程序状态。