您的位置:首页 > 编程语言 > Java开发

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;
}
}

以上就是微服务常用组件搭建的项目,以后会对每个组件源码进行学习和记录

 

 

 

 

 

 

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: