SpringCloud基础搭建
2019-03-15 22:44
267 查看
最近在学习微服务知识,本文使用Eureka、Ribbon、Zuul、Feign搭建一个简易的微服务架构
eureka-server项目
pom文件:
[code]<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> <version>2.1.0.RELEASE</version> <dependency>
application.properties配置如下:
[code]spring.application.name=eureka-server server.port=8000 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
主类配置如下:
[code]@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
eureka-client项目
pom文件:
[code]<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.1.0.RELEASE</version> </dependency>
application.properties配置如下:
[code]spring.application.name=eureka-client-user server.port=9000 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka
启动主类:
[code]@SpringBootApplication @EnableEurekaClient public class EurekaClientUserApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientUserApplication.class, args); } }
实体类User:
[code]@Data @AllArgsConstructor @NoArgsConstructor public class User { private Long uId; private String name; private Integer age; }
UserService:
[code]public interface UserService { User findOne(Long uId); User saveOne(User user); }
UserService实现类:
[code]@Service @Slf4j public class UserServiceImpl implements UserService { private static Map<Long,User> userMap = new HashMap<>(); static { User user = new User(0L,"ranran",26); userMap.put(user.getUId(),user); } @Override public User findOne(Long uId) { return userMap.get(uId); } @Override public User saveOne(User user) { return userMap.put(user.getUId(),user); } }
UserController类:
[code]@RestController @RequestMapping("user") @Slf4j public class UserController { @Autowired private UserService userService; @Autowired private Environment environment; @GetMapping("findOne") public User findOne(Long uId){ log.info("当前请求实例为:" + environment.getProperty("local.server.port")); return userService.findOne(uId); } @PostMapping("saveOne") public User saveOne(User user){ log.info("当前请求实例为:" + environment.getProperty("local.server.port")); return userService.saveOne(user); } }
UserConsumer:
pom文件:
[code]<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.1.0.RELEASE</version> </dependency>
application.properties:
[code]spring.application.name=feign-user server.port=10001 eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/ feign.hystrix.enabled=true
consumer主类:
[code]@SpringBootApplication @EnableFeignClients @EnableEurekaClient @EnableHystrix public class EurekaClientFeignApplication { public static void main(String[] args) { SpringApplication.run(EurekaClientFeignApplication.class, args); } }
User实体类:
[code]@Data @AllArgsConstructor @NoArgsConstructor public class User { private Long uId; private String name; private Integer age; }
使用Feign调用UserService:
[code]@FeignClient(value = "eureka-client-user", fallback = UserFeignServiceFallBack.class) public interface UserFeignService { @GetMapping("/user/findOne") User findOne(@RequestParam("uId") Long uId); @PostMapping("/user/saveOne") User saveOne(@RequestBody User user); }
熔断接口:
[code]@Component public class UserFeignServiceFallBack implements UserFeignService { @Override public User findOne(Long uId) { return new User(); } @Override public User saveOne(User user) { return new User(); } }
Consumer控制类:
[code]@RestController @RequestMapping("user") public class UserFeignController { @Autowired private UserFeignService userFeignService; @GetMapping("findOne") public User findOne(Long uId){ return userFeignService.findOne(uId); } @PostMapping("saveOne") public User saveOne(User user){ return userFeignService.saveOne(user); } }
Zuul组件类:
pom文件:
[code]<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-ribbon</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.1.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.1.0.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-actuator --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> <version>2.1.3.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-zuul --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.1.0.RELEASE</version> </dependency>
application.properties:
[code]spring.application.name=zuul-client server.port=11000 zuul.prefix=/a zuul.routes.feign-user=/api-a-url/** eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka
主类:
[code]@SpringCloudApplication @EnableZuulProxy public class ZuulClientApplication { public static void main(String[] args) { SpringApplication.run(ZuulClientApplication.class, args); } @Bean AccesssFilter accesssFilter(){ return new AccesssFilter(); } }
自定义Zuul拦截器:
[code]public class AccesssFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext requestContext = RequestContext.getCurrentContext(); HttpServletRequest request = requestContext.getRequest(); String accessToken = request.getParameter("accessToken"); if (StringUtils.isEmpty(accessToken)) { requestContext.setSendZuulResponse(false); requestContext.setResponseStatusCode(401); return "缺少accessToken参数"; } return null; } }
以上就是微服务常用组件搭建的项目,以后会对每个组件源码进行学习和记录
相关文章推荐
- 非spring-boot调用基于spring-cloud + zookeeper微服务 - 基础搭建
- Spring Cloud最新版(Finchley)一条龙基础架构搭建
- springcloud微服务一:spring boot基础项目搭建及问题处理
- 搭建一个基础的Spring Cloud项目
- Spring Cloud搭建微服务架构----前言
- spring cloud config搭建说明例子(四)-补充配置文件
- springboot构建spring cloud 微服务项目 搭建ARTHUR框架分享
- SSM基础框架搭建(SpringMVC+Spring+Mybatis)
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- SpringCloud微服务基础
- spring cloud 注册中心的搭建
- Spring Cloud 应用篇 之 Hystrix Turbine(断路器聚合监控)的基本搭建
- spring环境搭建&spring快速入门---【小白系列】0基础到熟练应用spring框架(一)
- 利用SpringCloud和Docker搭建普通互联网应用架构
- 利用SpringCloud和Docker搭建普通互联网应用架构
- 利用SpringCloud搭建一个最简单的微服务框架
- Spring Cloud 基于OAth2协议与JWT搭建一个简易网关
- (01) SpringCloud: Eureka Server 搭建
- Spring Cloud之Eureka自我保护环境搭建
- 基于spring boot的企业项目完成基础框架搭建需要的模块