SpringCload搭建(一):使用Nacos实现服务注册与发现,远程调用(restTemplate),负载均衡@LoadBalanced
使用的项目:项目D:\me\springCloadProjectAll\springcload01
一:理解
nacos是springcload的注册中心,所以先启动nacos然后才是启动其他的就可以在nacos里面注册
二:实操
1.安装nacos
-
启动nacos服务(单机模式&内嵌数据库)
0.前提:配置JAVA_HOME环境变量,不配置会导致无法运行Nacos
1.下载源码或者安装包
安装包地址:https://github.com/alibaba/nacos/releases
2.解压后进入nacos/bin目录
3.输入命令启动服务
linux:sh startup.sh -m standalone
windows:cmd startup.cmd
4.控制台启动下,看到"Nacos started successfully in stand alone mode.”后表示服务已启动
5.nacos默认使用8848端口,可通过http://127.0.0.1:8848/nacos/index.html进入自带的控制台界面,默认用户名/密码是nacos/nacos
3. 配置集群(略) - 启动
3.效果
2.搭建springcload框架
- 先创建一个maven项目,maven是盒子,使用的主要是pom文件
- G:\2\springcload\01 使用Nacos实现服务注册与发现\资料\pom文件,粘贴然后进行名称之类的修改
2.创建模块(springboot):provider
1.选中项目右键new-module搭建springboot项目作为模块
2.修改pom文件,引入父类pom文件这样可以引入父类的依赖,packaging写jar,可以打成jar包进行使用
<?xml version="1.0" encoding="UTF-8"?>xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.xiu
springcload01
1.0-SNAPSHOT
com.xiu
provider
0.0.1-SNAPSHOT
provider
jar
子模块,生产者
3.写yml配置文件
server:
port: 7101
spring:
cloud:
nacos:
discovery:
# 往nacos注册的地址
server-addr: 127.0.0.1:8848
# 注册名
application:
name: provider
4.启动类添加注册nacos注解
@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
}
5.效果注册成功
3.搭建消费者consumer
1.new module
2.pom文件
<?xml version="1.0" encoding="UTF-8"?>xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.xiu
springcload01
1.0-SNAPSHOT
com.xiu
consumer
0.0.1-SNAPSHOT
consumer
jar
子模块.消费者
3.yml文件
server:
port: 6101
spring:
cloud:
nacos:
discovery:
# 往nacos注册的地址
server-addr: 127.0.0.1:8848
# 注册名
application:
name: consumer
4效果
3.消费者简单调用生产者
1.写远程调用的配置类
/**
* @Author: LJX
* @DateTime: 2022/3/11 22:58
* @Description: restTemplate配置类
*/
@Configuration
public class RestTemplateConfig {
@Bean
@LoadBalanced //开启负载均衡 (比如有三个生产者,消费者去调用时可以分开调用,而不是每次都只调用那一个生产者)(feign默认开启不需要这一步)
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
2.消费者controller层去调用provider
/**
* @Author: LJX
* @DateTime: 2022/3/11 16:38
* @Description: TODO
*/
@RestController
@RequestMapping("/test")
public class HelloController {
@Resource
private RestTemplate restTemplate;
@RequestMapping("/hello")
public String hello(){
System.out.println("消费者");
//调用生产者,url + 返回类型
String forEntity = restTemplate.getForObject("http://provider/test/hello", String.class);
return forEntity;
}
}
3.效果图:页面使用consumer调用了provider