2019独角兽企业重金招聘Python工程师标准>>> 
4.0.0 com.eureka.server eureka_server 1.0.1-SNAPSHOT UTF-8 UTF-8 1.8 org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.cloud spring-cloud-starter-eureka-server org.springframework.boot spring-boot-starter-test test org.springframework.cloud spring-cloud-dependencies Dalston.RC1 pom import org.springframework.boot spring-boot-maven-plugin spring-milestones Spring Milestones https://repo.spring.io/milestone false
1.2 启动类 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
EnableEurekaServer SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
1.3 application.yml
server: port: 8761
eureka: instance: hostname: localhost client: #由于该应用为注册中心,所以设置为false,代表不向注册中心注册自己 registerWithEureka: false #由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
2. 服务提供方
包结构
服务启动类和service业务类同目录结构 com.cloud.eureka.client.ucenter com.cloud.eureka.client.ucenter.biz UserInfoService.java com.cloud.eureka.client.ucenter.domain UserDto.java com.cloud.eureka.client.ucenter.network com.cloud.eureka.client.ucenter.network.request QueryUserByIdRequest.java com.cloud.eureka.client.ucenter.network.response QueryUserByIdResult.java AutoRequest.java AutoResult.java com.cloud.eureka.client.ucenter.service UcenterInfoService.java UcenterApplicationRunner.java 2 pom.xml 配置
4.0.0 com.cloud.eureka.client ucenter war 1.0.1-SNAPSHOT ucenter Maven Webapp http://maven.apache.org org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.cloud spring-cloud-dependencies Camden.SR7 pom import junit junit test org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-test test ucenter
2.2 application.yml eureka: client: serviceUrl: #注册中心的地址 defaultZone: http://localhost:8761/eureka/ server: #当前服务端口号 port: 8762 spring: application: #当前应用名称 name: ucenter
2.3 启动类
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.web.bind.annotation.RestController;
SpringBootApplication EnableEurekaClient RestController public class UcenterApplicationRunner { public static void main(String[] args) { SpringApplication.run(UcenterApplicationRunner.class, args); } }
2.4 服务类和实体类 com.cloud.eureka.client.ucenter
import java.io.Serializable;
public class AutoResult implements Serializable { /** */ private static final long serialVersionUID 8058341569104586241L;
private String respCode; private String respMsg; public String getRespCode() { return respCode; } public void setRespCode(String respCode) { this.respCode respCode; } public String getRespMsg() { return respMsg; } public void setRespMsg(String respMsg) { this.respMsg respMsg; } }
import java.io.Serializable;
public class AutoRequest implements Serializable {
/*** */ private static final long serialVersionUID 53972042882786734L; }
import java.util.List;
import com.cloud.eureka.client.ucenter.network.AutoResult;
public class QueryUserByIdResult extends AutoResult {
/** */ private static final long serialVersionUID -5759747298893119629L; private T model; private List modelist; public T getModel() { return model; } public void setModel(T model) { this.model model; } public List getModelist() { return modelist; } public void setModelist(List modelist) { this.modelist modelist; } }
import com.cloud.eureka.client.ucenter.network.AutoRequest;
public class QueryUserByIdRequest extends AutoRequest {
/***/ private static final long serialVersionUID -5959985997526831945L;
private Long userId;
public Long getUserId() { return userId; }
public void setUserId(Long userId) { this.userId userId; } }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController;
import com.cloud.eureka.client.ucenter.biz.UserInfoService; import com.cloud.eureka.client.ucenter.domain.UserDto;
RestController public class UcenterInfoService {
private final Logger logger LoggerFactory.getLogger(UcenterInfoService.class); Autowired private DiscoveryClient discoveryClient; RequestMapping(value "/hello", method RequestMethod.GET) public String index() { ServiceInstance instance discoveryClient.getLocalServiceInstance(); logger.info("ucenter server access index() " this.getClass().getSimpleName() " " Thread.currentThread().getName()); logger.info("/hello, host:" instance.getHost() ", service_id:" instance.getServiceId()); return "Hello World"; } Autowired private UserInfoService userInfoService; RequestMapping(value "/queryUserInfo", method RequestMethod.GET) public UserDto queryUserInfo (RequestParam("userId") Long userId) { logger.info("ucenter server access queryUserInfo " this.getClass().getSimpleName() " " Thread.currentThread().getName()); logger.info("恭喜用户 " userId " 你连接成功"); return userInfoService.queryUserInfo(); }
RequestMapping(value "queryUserList", method RequestMethod.POST) public List queryUserList() { logger.info("<--- ucenter server access queryUserList " this.getClass().getSimpleName() " " Thread.currentThread().getName()); List ulist userInfoService.queryUserList(); return ulist; } RequestMapping(value "/queryUserById", method RequestMethod.POST) public QueryUserByIdResult queryUserUserId(QueryUserByIdRequest request) { logger.info("<--- ucenter server access queryUserInfo " this.getClass().getSimpleName() " " Thread.currentThread().getName()); QueryUserByIdResult result new QueryUserByIdResult(); UserDto dto userInfoService.queryUserInfo(); result.setModel(dto); result.setRespCode("000"); result.setRespMsg("查询成功"); return result; } }
import org.springframework.stereotype.Service; import com.cloud.eureka.client.ucenter.domain.UserDto;
Service public class UserInfoService { public UserDto queryUserInfo() { UserDto dto new UserDto(); dto.setId(1l); dto.setUserName("李世民"); dto.setAddress("陕西省咸阳市紫禁城"); System.out.println("恭喜,恭喜你连接成功"); return dto; }
public List queryUserList() { UserDto dto new UserDto(); dto.setId(1203586l); dto.setUserName("李世民"); dto.setAddress("陕西省咸阳市紫禁城"); UserDto dto1 new UserDto(); dto1.setId(1022589l); dto1.setUserName("朱江明"); dto1.setAddress("江苏省南京市"); UserDto dto2 new UserDto(); dto2.setId(1022575l); dto2.setUserName("刘如海"); dto2.setAddress("湖北省省武汉市市"); List ulist new ArrayList(); ulist.add(dto); ulist.add(dto1); ulist.add(dto2); return ulist; } }
import java.io.Serializable;
public class UserDto implements Serializable { private static final long serialVersionUID 8541673794025166248L; private Long id; private String userName; private String address;
public Long getId() { return id; }
public void setId(Long id) { this.id id; }
public String getUserName() { return userName; }
public void setUserName(String userName) { this.userName userName; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address address; } }
3消费方
包结构 ComponentScan 与EnableEurekaClient 冲突所以启动类与调用服务方服务要在同一级目录否则扫描不到
com.cloud.profile com.cloud.profile.controller SystemController.java com.cloud.profile.dto UserDto.java com.cloud.profile.third ComsumerAppliactionRunner.java UcenterThirdService.java
pom.xml
4.0.0 com.cloud.profile profile war 1.0.1-SNAPSHOT profile Maven Webapp http://maven.apache.org org.springframework.boot spring-boot-starter-parent 1.5.2.RELEASE org.springframework.cloud spring-cloud-dependencies Camden.SR7 pom import junit junit test org.springframework.cloud spring-cloud-starter-eureka org.springframework.boot spring-boot-starter-web com.alibaba fastjson 1.2.46 org.springframework.cloud spring-cloud-starter-feign profile
application.properties
server.port8673 spring.application.nameprofile #注意此项设置为TRUE eureka.client.fetchRegistrytrue eureka.client.serviceUrl.defaultZone: http://localhost:8761/eureka/
eureka.client.registry-fetch-interval-seconds30 eureka.instance.lease-expiration-duration-in-seconds45
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.feign.EnableFeignClients;
SpringBootApplication EnableEurekaClient EnableFeignClients ComponentScan(basePackages {"com.cloud.profile.controller"}) public class ComsumerAppliactionRunner { public static void main(String[] args) { SpringApplication.run(ComsumerAppliactionRunner.class, args); } }
3.4. 第三方调用服务 import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam;
import com.cloud.profile.dto.UserDto;
服务名不区分大小写 name:远程服务名 即spring.application.name配置的名称
FeignClient(name "UCENTER") public interface UcenterThirdService {
RequestMapping(value "/hello", method RequestMethod.GET) public String index(); RequestMapping(value "/queryUserInfo", method RequestMethod.GET) public UserDto queryUserInfo (RequestParam("userId") Long userId);
RequestMapping(value "/queryUserList", method RequestMethod.POST) public List queryUserList(); RequestMapping(value "/queryUserById", method RequestMethod.POST) public QueryUserByIdResult queryUserById(QueryUserByIdRequest request); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import com.alibaba.fastjson.JSON; import com.cloud.profile.third.UcenterThirdService;
RestController public class SystemController { private static Logger logger LoggerFactory.getLogger(SystemController.class); Autowired private UcenterThirdService ucenterThirdService; RequestMapping(value "/queryUserInfo", method RequestMethod.GET) public String queryUserInfo (RequestParam("userId") Long userId) { logger.info("profile response " Thread.currentThread().getName() " " this.getClass().getSimpleName() JSON.toJSONString(ucenterThirdService.queryUserInfo(userId)));; logger.info(ucenterThirdService.index()); logger.info("profile response " Thread.currentThread().getName() " " this.getClass().getSimpleName() "恭喜用户 " userId " 你连接成功"); return "hello success"; } }
转:https://my.oschina.net/u/2510361/blog/1821171
