Skip to main content
Version: 2.3.0-Legacy

Integrate Http with soul gateway

Features

  • This chapter is a guide about integrating Http service with soul gateway.
  • Soul gateway uses divide plugin handling http request, pls enable it in soul-admin background.
  • Please start soul-admin successfully before integrating and Environment Setup is Ok.

Configure soul gateway as Http proxy.

  • Add these dependencies in gateway's pom.xml:
  <!--if you use http proxy start this-->
<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-divide</artifactId>
<version>${last.version}</version>
</dependency>

<dependency>
<groupId>org.dromara</groupId>
<artifactId>soul-spring-boot-starter-plugin-httpclient</artifactId>
<version>${last.version}</version>
</dependency>
  • pls restart the gateway.

Http request via soul gateway(springMVC user)

  • pls make sure divide plugin has enabled in soul-admin background.
add Soul-Client methods(available for SpringMVC,SpringBoot user)
  • SpringBoot User

    • Add these dependencies in your local maven repository pom.xml:

           <dependency>
      <groupId>org.dromara</groupId>
      <artifactId>soul-spring-boot-starter-client-springmvc</artifactId>
      <version>${last.version}</version>
      </dependency>
    • Backend server register center config, please look:register center access.

  • SpringMVC User

    • Add these dependencies in your local maven repository pom.xml:

             <dependency>
      <groupId>org.dromara</groupId>
      <artifactId>soul-client-springmvc</artifactId>
      <version>${last.version}</version>
      </dependency>
    • Inject these properties into your Spring beans XML file:

          <bean id ="springMvcClientBeanPostProcessor" class ="org.dromara.soul.client.springmvc.init.SpringMvcClientBeanPostProcessor">
      <constructor-arg ref="soulRegisterCenterConfig"/>
      </bean>

      <bean id="soulRegisterCenterConfig" class="org.dromara.soul.register.common.config.SoulRegisterCenterConfig;">
      <property name="registerType" value="http"/>
      <property name="serverList" value="http://localhost:9095"/>
      <property name="props">
      <map>
      <entry key="contextPath" value="/your contextPath"/>
      <entry key="appName" value="your server name"/>
      <entry key="port" value="your server port"/>
      <entry key="isFull" value="false"/>
      </map>
      </property>
      </bean>
  • Add this annotation @SoulSpringMvcClient in your controller interface.

    • You can apply the annotation to class-level in a controller.the name of the path variable is prefix and '/**' will apply proxy for entire interfaces.

    • Example1: both /test/payment and /test/findByUserId will be handled by proxy service.

        @RestController
      @RequestMapping("/test")
      @SoulSpringMvcClient(path = "/test/**")
      public class HttpTestController {

      @PostMapping("/payment")
      public UserDTO post(@RequestBody final UserDTO userDTO) {
      return userDTO;
      }

      @GetMapping("/findByUserId")
      public UserDTO findByUserId(@RequestParam("userId") final String userId) {
      UserDTO userDTO = new UserDTO();
      userDTO.setUserId(userId);
      userDTO.setUserName("hello world");
      return userDTO;
      }
      }
    • Example2: /order/save will be handled by proxy service, but /order/findById won't.

        @RestController
      @RequestMapping("/order")
      @SoulSpringMvcClient(path = "/order")
      public class OrderController {

      @PostMapping("/save")
      @SoulSpringMvcClient(path = "/save")
      public OrderDTO save(@RequestBody final OrderDTO orderDTO) {
      orderDTO.setName("hello world save order");
      return orderDTO;
      }

      @GetMapping("/findById")
      public OrderDTO findById(@RequestParam("id") final String id) {
      OrderDTO orderDTO = new OrderDTO();
      orderDTO.setId(id);
      orderDTO.setName("hello world findById");
      return orderDTO;
      }
      }
  • Kick off your project with your interface, which is integrated with soul gateway.

Configure soul gateway as an Http proxy(other framework)

  • first of all, enable the divide plugin in soul-admin, then add selector and rule which will filter the request.
  • if you don't know how to configure, pls refer to selector guide.
  • you can also develop your cutomized http-client,refer to multi-language Http client development

User request

  • Send the request as before, only two points need to notice.

  • Firstly,the domain name that requested before in your service, now need to replace with gateway's domain name.

  • Secondly,soul gateway needs a route prefix which comes from contextPath, it configured during the integration with gateway, you can change it freely in divide plugin of soul-admin, if you are familiar with it.

    • for example, if you have an order service and it has a interface, the request url: http://localhost:8080/test/save

    • Now need to change to: http://localhost:9195/order/test/save

    • We can see localhost:9195 is your gateway's ip port,default port number is 9195 ,/order is your contextPath which you configured with gateway.

    • other parameters doesn't change in request method.

    • Any questions, pls join the group and we can talk about it.

  • Then you can visit, very easy and simple.