问题:
在使用高版本的nacos中之前低版本的使用方式是有所变化的,那这些变化是什么,如何解决?
我使用的是springboot版本:2.7.3;springcloud:2021.0.6;springcloud-alibaba:2021.0.5.0
本次只说明在linux环境中:
一、准备环境:
一、启动虚拟机:
一、创建或启动之前的:
略:
二、上传nacos并解压:
一、解压:
# 先对nacos进行解压
tar -xvf nacos.XXXX.tar
二、开放端口并启动nacos:
# 说明:在nacos 2.X 的版本需要额外开放一个端口,是9848,也就是8848+1000
# 因为在nacos2.X的版本,新增了gRPC的通信方式,所有需要开放这个9848端口
# 单机启动nacos:
[root@localhost bin]# pwd
/usr/local/cloud/nacos/nacos/bin
[root@localhost bin]# ./startup.sh -m standalone
#开启防火墙
[root@localhost bin]# systemctl start firewalld
#开放9848端口
[root@localhost bin]# firewall-cmd --zone=public --add-port=9848/tcp --permanent
#使配置生效
[root@localhost bin]# firewall-cmd --reload
#查看所有端口
[root@localhost bin]# firewall-cmd --zone=public --list-ports
三、查看nacos服务端:
在浏览器输入:http://虚拟机地址:8848/nacos
账号密码默认是nacos
三、代码整合:
一、导入依赖:
# 提示:父工程是springcloud-alibaba,已经指定的版本,所以我这里不需要指定版本
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
二、编写bootstrap配置信息:
一、导入依赖:
# 我使用的springboot版本是2.7.3,如果不导入依赖,bootstrap.yml配置文件是不会生效的
# 导入这个依赖就是bootstrap.yml为件生效
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
二、向nacos注册中心注册:
# 这个配置是在bootstrap.yml配置的
spring:
cloud:
nacos:
# 向服务注册自己
discovery:
server-addr: xxx.xxx.xx.xx:8848
#例如:server-addr: 192.168.232.114:8848
三、主启动类添加注解:
@SpringBootApplication
# 开启nacos的发现
@EnableDiscoveryClient
public class ConsumerOrder80 {
public static void main(String[] args) {
SpringApplication.run(ConsumerOrder80.class,args);
}
}
四、远程调用:
一、导入依赖:
# 这个版本是不需要指定的,springcloud已经指定了
# 作用:让RestTemplate远程调用生效
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
二、编写RestTemplate配置类:
@Configuration
public class RPCConfig {
@Bean
// 可以解析服务的应用名去访问
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
三、指定需要调用的服务名:
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private OrderService orderService;
@GetMapping("/findAll")
public Result findAll(){
List<Order> orderList = orderService.findAll();
return Result.ok(orderList);
}
// provider-payment8001为远程服务名
private final static String PAYMENT_URL = "http://provider-payment8001/payment/2";
@GetMapping("/{orderId}")
public String OrderTest(@PathVariable("orderId") Integer orderId) {
String returnPayment = restTemplate.getForObject(PAYMENT_URL, String.class);
return "消费记录ID:" + orderId + "\t" + returnPayment;
}
}
四、启动测试:
略
五、注意:
注意:在高版本的springcloud中,没有ribbon,更加没有IRule接口,不能直接向低版本一样自己创建一个bean,可以直接修改负载均衡方式,