soul-admin
successfully before integrating and Environment Setup is Ok.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>
soul-admin
background.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.
soul-admin
, then add selector and rule which will filter the 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.