编辑接口设计及微服务内部接口调用方式,feign接口调用
1.根据ID新增修改接口 根据ID来区分,有值则认为是修改,否则是新增。 新增接口 /add 基本原则:编辑修改接口是基于ID来修改操作。
2.改成ip方式,而不是网关,否则报错:网关登录失效 内部服务之间的接口调用ip:端口方式,而不是网关的方式 网关的访问更多的是对外部。对内部是ip:端口方式。不经过网关服务。 myUserService.url = http://xxx:xx
3.feign使用,前提是微服务之间都使用了同一套服务注册。原则:未服务注册,不使用feign
##注册服务端口方式 spring.application.name = my-product-server server.port=1418 //eureka注册上面的名称: hz-auto-tomcat-pro-14:my-product-server:1418 , hz-auto-tomcat-pro-13:my-product-server:1418 ##注册服务名称方式(不是端口号,是服务名称) spring.application.name = myUserService //eureka注册上面的名称(最后没有端口号): hz-auto-tomcat-pro-16:myUserService , hz-auto-tomcat-pro-15:myUserService
如果当前maven服务 未服务注册,最终还是不能使用feign方式。可以使用第2条的ip方式通过RestTemplate exchange方式来发起GET/POST调用。 可以通过服务提供方提供feign api jar包提供出去。也可以在服务调用方发起方,手动编写feign类来调用也可以。如下代码:
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@FeignClient(name = "my-user-server")
public interface FeignMyUserService {
@PostMapping("/my/user/save")
public ResponseData save(@RequestBody MyUserRequestVO vo);
}
//
public class ResponseData<T> {
@AutoDocProperty("返回代码")
private String resCode;
@AutoDocProperty("返回消息")
private String resMsg;
@AutoDocProperty("返回实体")
private T data;
}
#注册feign
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@EnableFeignClients({"com.user","com.product"})
@EnableEurekaClient
@SpringBootApplication(scanBasePackages = {"com.user.order","com.product.order","com.product"})
@MapperScan({"com.product.order"})
public class MyUserServerSpringBoot extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(MyUserServerSpringBoot.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(MyUserServerSpringBoot.class);
}
}