# SpringCloud-Alibaba
**Repository Path**: windyzone/spring-cloud-alibaba
## Basic Information
- **Project Name**: SpringCloud-Alibaba
- **Description**: SpringCloudAlibaba分布式微服务的各种组件,包括分布式事务解决方案Seata、注册中心配置中心Nacos、负载均衡Ribbon、服务降级Hystrix、服务调用RestTemplate、Feign、流控Sentinel、网关Gateway、以及中间件RabbitMQ的使用
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 8
- **Created**: 2024-02-19
- **Last Updated**: 2024-02-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 一、服务名及端口
springcloud-alibaba-account 账户服务 9000
springcloud-alibaba-account 账户服务2 9001
springcloud-alibaba-order 订单服务 9002
springcloud-alibaba-storage 库存服务 9003
api-service 网关服务 9004
springcloud-alibaba-user 用户服务 9005
springboot-security security 8080
# 二、分布式事务Seata
seata-server Seata分布式事务TC事务协调器 8091
seata使用nacos作为配置中心:https://blog.csdn.net/DreamsArchitects/article/details/118368658
## 微服务流程流程
Order下单 -> Storage扣减库存 -> Account扣减金额 -> Order完成订单
如果使用1.1版本以上的seata组名记得用 vgroupMapping,1.0及之前的用vgroup_mapping
# 三、数据库
地址:localhost:3306
库名:seata
用户名:root
密码:123456
# 四、Nacos注册中心及配置中心
http://localhost:8848/nacos
账号:nacos
密码:nacos
Nacos注册中心、配置中心的使用:https://blog.csdn.net/DreamsArchitects/article/details/116790743
Nacos负载均衡的使用:https://blog.csdn.net/DreamsArchitects/article/details/119034848
# 五、Sentinel控制台
http://localhost:8888
账号:sentinel
密码:sentinel
Sentinel与SpringBoot整合:https://blog.csdn.net/DreamsArchitects/article/details/118293490
# 六、负载均衡
如果使用了负载均衡,则可以直接通过服务名进行访问,代替 ip+port 访问。
## RestTemplate
在Nacos的依赖中集成了Ribbon的依赖
使用`@LoadBanlans`注解,实现负载均衡的目的。
## Feign
在Feign的依赖中集成了Ribbon的依赖
使用Feign进行服务调用不需要在加上`@LoadBanlans`注解。
# 七、Gateway网关
路由转发
api-service 网关服务 9004
账号服务接口
http://localhost:9000/account/findAll
走网关接口访问账号服务:
http://localhost:9003/springcloud-alibaba-account/account/findAll
# 八、SpringBoot RestTemplate 服务调用
## GET
getForEntity 方法:
GET请求带参数 http://localhost:9000/account/get?name={1}&age={2},第一个参数是 url ,url 中有一个占位符 {1} ,如果有多个占位
restTemplate.getForObject(url, String.class,name,age)
第二种 使用{name}占位符 使用Map进行传参 key为name:
String url2 = "http://localhost:9000/account/get?name={name}&age={age}"
String forObject = restTemplate.getForObject(url, String.class,map);
## POST(包括key/value和JSON格式)
唯一的区别就是第二个参数的类型不同,这个参数如果是一个 `MultiValueMap` 的实例,则以 key/value 的形式发送,如果是一个普通对象,则会被转成 json 发送
```
MultiValueMap map = new LinkedMultiValueMap();
map.add("name","zhangsan");
map.add("age",20);
```
## PUT(包括key/value和JSON格式)
与 POST 相同,PUT和DELETE没有返回值
## DELETE(参数请求与GET一样)
与GET请求相同。
## Exchange
构造请求头 `HttpHeaders`
```
HttpHeaders headers = new HttpHeaders();
headers.add("username","ZhangSan");
```
构造请求体 `HttpEntity`
```
//第一个参数实际上就相当于 POST/PUT 请求中的第二个参数;第二个参数是请求头
HttpEntity