目录
一、spring cloud 介绍
二、开发环境:
三、spring cloud
四、Spring MVC 接收参数的几个注解
五、搭建spring cloud 业务模块
(一)、概述
(二)、item-commons通用项目
1.新建maven项目
2.添加依赖
3.创建三个实体类:Item、User、Order (Lombok)
4.创建三个servise接口:
(三)、item-service商品模块
1.新建 spring boot 起步模块:sp02-itemservice
2.添加选择 web 依赖(Spring Web)
3.pom.xml
4.配置 application.yml
5.创建 Service 实现类 ItemServiceImpl (@Service 标记 @Slf4j 日志)
6.创建 Controller 控制类 ItemController(@RestController 接受请求,标记控制层 @Slf4j 日志)
7.测试
(四)、user-service 用户模块
1.新建 spring boot 起步项
2.添加选择 web 依赖 (同)
3.配置依赖 pom.xml (同)
4.配置 application.yml
5.创建 Service 实现类 UserServiceImpl
6.创建 Controller 控制类 UserController
7.访问
(五)、order-service订单服务
1.新建 spring boot 起步项
2.添加选择 web 依赖 (同)
3.配置依赖 pom.xml (同)
4.配置 application.yml
5.创建 Service 实现类 OrderServiceImpl
6.创建 Controller 控制类 OrderController
7.访问
1.spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。
2.给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
3.使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本,在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案
eureka
微服务治理,服务注册和发现
ribbon
负载均衡、请求重试
hystrix
断路器,服务降级、熔断
feign
ribbon + hystrix 集成,并提供声明式客户端
hystrix dashboard 和 turbine
hystrix 数据监控
zuul
API 网关,提供微服务的统一入口,并提供统一的权限验证
config
配置中心
bus
消息总线, 配置刷新
sleuth+zipkin
链路跟踪
集成多种工具,解决为服务中的各种问题
File - New project settings - settings for new projects
这里配置配置好,每次新建工程,都应用这个配置
新建 Empty project 工程: springcloud1
新建 Maven 模块: sp01-commons --- 存放业务模块中的通用代码
pom.xml 添加依赖
代码
商品、用户、订单实体类
三个业务接口
三个工具类:cookie工具、json工具、封装响应数据的工具
public interface ItemService {
List- getItems(String orderId);
void decreaseNumbers(List
- list);
}
public interface UserService {
User getUser(Integer id);
void addScore(Integer id, Integer score);
}
public interface OrderService {
Order getOrder(String orderId);
void addOrder(Order order);
}
创建 util 包下 CookieUtil、JsonUtil、JsonResult
spring:
application:
name: item-service
server:
port: 8001
@Slf4j
@Service
public class ItemServiceImpl implements ItemService {
@Override
public List- getItems(String orderId) {
ArrayList
- list = new ArrayList
- ();
list.add(new Item(1, "商品 1",1));
list.add(new Item(2, "商品 2",2));
list.add(new Item(3, "商品 3",3));
return list;
}
@Override
public void decreaseNumbers(List
- list) {
for(Item item : list) {
log.info("减少库存 - "+item);
}
}
}
@Slf4j
@RestController
public class ItemController {
@Autowired
private ItemService itemService;
@Value("${server.port}")
private int port;
@GetMapping("/{orderId}")
public JsonResult> getItems(@PathVariable String orderId) {
log.info("server.port="+port+", orderId="+orderId);
List- items = itemService.getItems(orderId);
return JsonResult.ok(items).msg("port="+port);
}
@PostMapping("/decreaseNumber")
public JsonResult decreaseNumber(@RequestBody List
- items) {
itemService.decreaseNumbers(items);
return JsonResult.ok();
}
}
sp:
user-service:
users: "[{\"id\":7, \"username\":\"abc\",\"password\":\"123\"},{\"id\":8, \"username\":\"def\",\"password\":\"456\"},{\"id\":9, \"username\":\"ghi\",\"password\":\"789\"}]"
spring:
application:
name: user-service
server:
port: 8101
@Slf4j
@Service
public class UserServiceImpl implements UserService {
@Value("${sp.user-service.users}")
private String userJson;
@Override
public User getUser(Integer id) {
log.info("users json string : "+userJson);
List list = JsonUtil.from(userJson, new TypeReference>() {});
for (User u : list) {
if (u.getId().equals(id)) {
return u;
}
}
return new User(id, "name-"+id, "pwd-"+id);
}
@Override
public void addScore(Integer id, Integer score) {
// 这里增加积分
log.info("user "+id+" - 增加积分 "+score);
}
}
@Slf4j
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/{userId}")
public JsonResult getUser(@PathVariable Integer userId) {
log.info("get user, userId="+userId);
User u = userService.getUser(userId);
return JsonResult.ok(u);
}
@GetMapping("/{userId}/score")
public JsonResult addScore(
@PathVariable Integer userId, Integer score) {
userService.addScore(userId, score);
return JsonResult.ok();
}
}
spring:
application:
name: order-service
server:
port: 8201
@Slf4j
@Service
public class OrderServiceImpl implements OrderService {
@Override
public Order getOrder(String orderId) {
//TODO: 调用user-service获取用户信息
//TODO: 调用item-service获取商品信息
Order order = new Order();
order.setId(orderId);
return order;
}
@Override
public void addOrder(Order order) {
//TODO: 调用item-service减少商品库存
//TODO: 调用user-service增加用户积分
log.info("保存订单:"+order);
}
}
@Slf4j
@RestController
public class OrderController {
@Autowired
private OrderService orderService;
@GetMapping("/{orderId}")
public JsonResult getOrder(@PathVariable String orderId) {
log.info("get order, id="+orderId);
Order order = orderService.getOrder(orderId);
return JsonResult.ok(order);
}
@GetMapping("/")
public JsonResult addOrder() {
//模拟post提交的数据
Order order = new Order();
order.setId("123abc");
order.setUser(new User(7,null,null));
order.setItems(Arrays.asList(new Item[] {
new Item(1,"aaa",2),
new Item(2,"bbb",1),
new Item(3,"ccc",3),
}));
orderService.addOrder(order);
return JsonResult.ok();
}
}