【问题标题】:Extending functionality to support HTTP clients扩展功能以支持 HTTP 客户端
【发布时间】:2016-08-17 20:42:33
【问题描述】:

需要一些关于扩展现有功能(在 SI 项目中实现)以支持基于 SOAP 的 Web 服务的指针。

这是我的场景:

我有一个实现核心功能的 SI 项目。目前,SI 项目支持通过 JMS 进行消息交换。 核心功能经过良好测试,作为独立应用程序在生产区域运行良好。

现在出现了一个增强请求,我需要为 SOAP 客户端提供支持。 SOAP 客户端将使用与 JMS 客户端相同的核心功能。

  1. jms-endpoint.xml:定义 JMS 请求-回复交互细节。
  2. core-func.xml :定义核心功能(为本文简化)。根据 JMS 消息中传递的员工 ID,它返回 Promotion Eligibility 标志。

问题: 1. 是否可以利用现有的 SI 代码添加对 SOAP 客户端的支持?

我不想将核心功能移至 servlet 容器并重新测试在 JMS 客户端上运行良好的整个独立 SI 项目。

jms-endpoint.xml

<beans xmlns="http://www.springframework.org/schema/beans" .... >
  <import resource="queue.xml"/>
  <import resource="core-func.xml"/>

  <int:channel id="inboundMessage"/>
  <int-jms:inbound-gateway request-channel="inboundMessage"
                       request-destination="requestQueue"  default-reply-destination="responseQueue"/>
</beans>

core-func.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" ....>
  <int:chain input-channel="inboundMessage">
    <int:service-activator ref="employeeService"    method="getEmployeeData"/>
    <int:service-activator ref="eligibilityService" method="getPromotionEligibility" />
  </int:chain>

  <bean id="eligibilityService"  class="com.samples.service.EligibilityService" />
  <bean id="employeeService"   class="com.samples.service.EmployeeService">
     <property name="employeeDao" ref="employeeDao"/>
  </bean>
  <bean id="employeeDao"  class="com.samples.dao.EmployeeDao" />   
</beans>

【问题讨论】:

    标签: spring-integration


    【解决方案1】:

    您的问题有很多不相关的信息。至少国际海事组织。 无论如何,让我尝试回答这个问题:

    您能否建议我将现有功能扩展到 HTTP 客户端的方法。

    是的,您始终可以这样做,不仅对 HTTP,而且对任何其他所需和必需的协议。

    对于 SOAP,您应该查看完全基于 Spring WS 项目的 Spring Integration WS 模块。

    为此,您的应用程序必须基于 Web。当然你可以去Spring Boot看看这件事。

    不知道你还想听什么...

    【讨论】:

    • 感谢您的 cmets。我已经编辑了这个问题以便更好地理解。希望我的问题现在很清楚。
    • 太棒了!我现在看到了(或没有……)。那么,您将如何在没有 servlet 容器的情况下将 SOAP 引入您的应用程序?正如我所说:您始终可以在应用程序中拥有尽可能多的入口点。具有相同的核心功能。只有 servlet 容器是必需的问题。真实的或嵌入的,但仍然。是的,您也可以为 SOAP 使用 JMS 传输,但是您的客户会乐于不通过标准 HTTP 传输与您交互吗?
    • 标准 HTTP 传输正在被广泛使用,客户会想要它。从您的 cmets 中,我得出的结论是,对于一个新的 SI 项目,我将使用 servlet 容器,因为它使我可以灵活地在以后添加 HTTP 端点,而不会带来太多的痛苦/成本。由于重复测试工作,将现有的独立 SI 应用程序迁移到 servlet 容器(以引入 SOAP)可能不会被客户很好地接受。
    • 为了实现我在上面发布的场景,我正在考虑一种解决方法/解决方案。在 servlet 容器中创建一个新的 SI 项目以提供 SOAP 支持。它将托管 WSDL 并充当代理服务提供者。这个新的 SI 应用程序将使用 jms 出站网关将传入请求转发到队列。现有的独立 SI 应用程序已配置为侦听队列,并且可以处理和回复。核心 SI 应用无需更改。
    • 这也行。如果你真的打算做一个新的应用程序,你真的别无选择,除非重用其他应用程序中已经存在的入口点。我的想法只是为现有应用程序增加一项功能,重用来自 WS 适配器的那些核心通道。但从微服务的角度来看,解决方案很好
    【解决方案2】:

    使用Spring Boot 运行您的应用程序 - 它提供了一个嵌入式 servlet 容器;默认为tomcat,但你可以选择其他的。

    有几个Spring Integration Samples, including this one使用boot。

    【讨论】:

      猜你喜欢
      • 2021-12-08
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-13
      • 1970-01-01
      • 2017-07-09
      相关资源
      最近更新 更多