Spring Cloud 微服务(一)---- 介绍、基本模块搭建

目录

一、spring cloud 介绍

二、开发环境:

三、spring cloud 

四、Spring MVC 接收参数的几个注解

五、搭建spring cloud 业务模块

(一)、概述

(二)、item-commons通用项目

1.新建maven项目

2.添加依赖

3.创建三个实体类:Item、User、Order (Lombok)

4.创建三个servise接口:

5. 创建三个工具类: cookie工具、json工具、封装响应数据的工具

(三)、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.访问 


一、spring cloud 介绍

        1.spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

        2.给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

        3.使用 spring cloud 一站式解决方案能在从容应对业务发展的同时大大减少开发成本,在目前五花八门的分布式解决方案中提供了标准化的、一站式的技术方案

Spring Cloud

eureka
微服务治理,服务注册和发现

ribbon
负载均衡、请求重试

hystrix
断路器,服务降级、熔断

feign
ribbon + hystrix 集成,并提供声明式客户端

hystrix dashboard 和 turbine
hystrix 数据监控

zuul
API 网关,提供微服务的统一入口,并提供统一的权限验证

config
配置中心

bus
消息总线, 配置刷新

sleuth+zipkin
链路跟踪

二、开发环境:

  • Idea
  • 插件:Lombok  、EditStarters 、Free MyBatis Plugin、Maven Helper
  • Maven:使用阿里仓库和中央仓库,来回切换更新
  • springboot版本: 2.3.2.RELEASE
  • springcloud版本: Hoxton.SR8

三、spring cloud 

集成多种工具,解决为服务中的各种问题

  • 注册和发现:Nacos  、 Eureka
  • 远程调用: OpenFeign
  • 系统容错和限流: Sentinel   、Hystrix
  • 错误监控:Hystrix Dashboard  、Turbine
  • 配置中心 :Nacos  、Config
  • 链路跟踪 :Sleuth  、Zipkin

四、Spring MVC 接收参数的几个注解

接收参数

五、搭建spring cloud 业务模块

  • File - New project settings - settings for new projects

  • 这里配置配置好,每次新建工程,都应用这个配置

(一)、概述

  1. 新建 Empty project 工程: springcloud1

  2. 新建 Maven 模块: sp01-commons --- 存放业务模块中的通用代码

  3. pom.xml 添加依赖

  4. 代码

    1. 商品、用户、订单实体类

    2. 三个业务接口

    3. 三个工具类:cookie工具、json工具、封装响应数据的工具

  • 商品服务 item service,端口 8001
  • 用户服务 user service,端口 8101
  • 订单服务 order service,端口 8201

在这里插入图片描述

(二)、item-commons通用项目

1.新建maven项目

2.添加依赖

3.创建三个实体类:Item、User、Order (Lombok)

4.创建三个servise接口:

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

5. 创建三个工具类: cookie工具、json工具、封装响应数据的工具

        创建 util 包下 CookieUtil、JsonUtil、JsonResult 

(三)、item-service商品模块

1.新建 spring boot 起步模块:sp02-itemservice

2.添加选择 web 依赖(Spring Web)

3.pom.xml

  • springboot 版本:2.3.2.RELEASE
  • 添加 sp01-commons 依赖配置 application.yml

4.配置 application.yml

spring:
  application:
    name: item-service
    
server:
  port: 8001

5.创建 Service 实现类 ItemServiceImpl (@Service 标记 @Slf4j 日志)

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

6.创建 Controller 控制类 ItemController(@RestController  接受请求,标记控制层    @Slf4j 日志)

@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();
	}
}

7.测试

  • 根据orderId ,查商品 :http://localhost:8001/35
  • 减少商品库存: http://localhost:8001/decreaseNumber

(四)、user-service 用户模块

1.新建 spring boot 起步项

2.添加选择 web 依赖 (同)

3.配置依赖 pom.xml (同)

4.配置 application.yml

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

5.创建 Service 实现类 UserServiceImpl

​
@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);
	}
}

​

6.创建 Controller 控制类 UserController

@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();
	}
}

7.访问

  •  根据userid查询用户信息:http://localhost:8101/7
  • 根据userid,为用户增加积分:http://localhost:8101/7/score?score=100

(五)、order-service订单服务

1.新建 spring boot 起步项

2.添加选择 web 依赖 (同)

3.配置依赖 pom.xml (同)

4.配置 application.yml

spring:
  application:
    name: order-service
    
server:
  port: 8201

5.创建 Service 实现类 OrderServiceImpl

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

6.创建 Controller 控制类 OrderController

@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();
	}
}

7.访问 

  • 根据orderid,获取订单http://localhost:8201/123abc
  • 保存订单,观察控制台日志输出http://localhost:8201/

你可能感兴趣的:(spring,java,maven)