文章目录
本文基于 spring cloud alibaba v2.1.0 与spring cloud Greenwich.RELEASE 版本
所有spring cloud 系列文章源码地址: github
访问tag:v1.0-netflix 可以获得到 spring cloud netflix 组件的演示源码
切换v2.0-alibaba 分支可以访问到有关spring cloud alibaba 组件的源码
1.环境准备
1.1 nacos server单机部署
首先我们要去github下载nacos的server端: 链接,选择你需要的版本,当然你也可以把源码download下来,自己编译。
**注:**如果感觉github 访问太慢可以使用我这边放在百度云的一个包:
链接: https://pan.baidu.com/s/1WZWEDWrdWxTCzZV0jh7eBw 密码: 7emt
然后解压启动,启动方式
linux/mac os:startup.sh -m standalone
这里这个standalone是单机模式,不是集群模式
windows:startup.cmd
或者双击:startup.cmd文件。
详细信息访问官网文档:nacos官网文档
启动完成之后,我们可以浏览器访问 :http://127.0.0.1:8848/nacos/ 注意:账号密码 nacos/nacos
这里我们nacos 的单机环境就ok了。
1.2 代码环境
代码环境的话可以直接去github拉文章的演示源码: 链接,当然也可以自己重新集成一套。
spring-cloud-parent(这是项目父工程 管理了一些基础依赖,springcloud 版本管理)
–spring-cloud-user-service-consumer(用户服务,同样也是服务调用者)
–spring-cloud-order-service-provider(订单服务,服务提供者角色)
2. 简单集成使用
2.1 父工程改造
在父工程 spring-cloud-parent 中的pom.xml中我们需要对spring cloud alibaba 版本进行管理
<dependencyManagement>
<!--引入springcloud依赖的-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.2 订单服务改造
2.2.1 pom 依赖
如果是用的其他springcloud文章里面的环境,或者是github clone下来的tag:v1.0-netflix环境代码,需要将Eureka 客户端的依赖注释掉,并且添加nacos的依赖
<!--添加 spring cloud alibaba nacos 作为注册中心-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.2.2 配置文件
如果有eureka client 的配置,需要注释掉。
添加nacos的配置
spring:
cloud:
nacos:
discovery:
# nacos server地址
server-addr: 127.0.0.1:8848
2.2.3 主启动类
如果新项目或者是使用@EnableEurekaClient注解的,需要将这个注解注释掉,换成@EnableDiscoveryClient
2.2.4 对外提供服务
需要编写一个controller,对外提供服务
@RestController
@RequestMapping("/order/data")
public class OrderStatisticServiceController {
@Value("${server.port}")
private Integer port;
@Value("${spring.application.name}")
private String appName;
/**
* 根据用户id获取今日完单数
* @param id 用户ID
* @return 完单数
*/
@GetMapping("/getTodayFinishOrderNum/{id}")
public Integer getTodayFinishOrderNum(@PathVariable("id") Integer id){
System.out.println("我是"+port);
return port;
}
}
2.2.5 启动服务
我们启动这个订单服务,观察下nacos的管理界面,在服务列表这一栏中,发现我们的服务已经注册上了。
2.3 用户服务改造
2.3.1 常规改造
这里maven坐标依赖 ,配置类(**注意:**这里需要注意的是,如果是使用的tag:v1.0-netflix环境,需要把bootstrap.yml 注释掉,把有关链路采集的也注释掉),主启动类 与2.1章节 订单服务的改造一样
2.3.2 controller 改造
2.3.2.1 fegin方式调用
@RestController
@RequestMapping("/user/data")
public class UserCenterController {
@Autowired
private OrderStatisticFeginClient orderStatisticFeginClient;
@GetMapping("/getTodayStatistic/{id}")
public Integer getTodayStatistic(@PathVariable("id") Integer id){
Integer todayFinishOrderNum = orderStatisticFeginClient.getTodayFinishOrderNum(id);
return todayFinishOrderNum;
}
}
我这里是使用fegin进行的远程调用,如果没有集成fegin,可以使用resttemplate的方式来来调用
2.3.2.2 restTemplate方式调用
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/getTodayStatistic/{id}")
public Integer getTodayStatistic(@PathVariable("id") Integer id){
List<ServiceInstance> instances = discoveryClient.getInstances("spring-cloud-order-service-provider");
// 获取第一个服务信息
ServiceInstance instanceInfo = instances.get(0);
//获取ip
String ip = instanceInfo.getHost();
//获取port
int port = instanceInfo.getPort();
String url ="http://"+ip+":"+port+"/order/data/getTodayFinishOrderNum/"+id;
return restTemplate.getForObject(url, Integer.class);
}
2.3.3 启动注册
启动用户服务,访问nacos的管理平台,我们可以看到用户服务已经注册上了
2.4 调用测试
我们直接浏览器或者postman 访问http://127.0.0.1:8080/user/data/getTodayStatistic/100 调用,可以看到返回的结果