1. nacos下载,解压,启动。下载地址: 官网
2.springcloud项目 pom文件:
<!--nacos依赖-->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
3.yml文件配置:
server:
port: 8080
spring:
application:
name: demo
cloud:
nacos:
##使用nacos的配置中心
config:
server-addr: localhost:8848
file-extension: yaml
##以项目名称作为服务名注册
discovery:
server-addr: localhost:8848
service: ${spring.application.name}
nacos配置中心格式和项目中yml配置格式一样。
4.启动类添加 :
@RefreshScope 自动刷新配置 @EnableDiscoveryClient 开启注册
5.
可以使用默认分组,也可以创建自己的命名空间,yml配置命名空间。
6.
7.服务间调用:
@Configuration
public class RibbonConfig {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Bean
public IRule ribbonRule(){
return new RandomRule();
}
}
使用restTemplate调用,可以起到负载均衡效果。
@Autowired private TestService testService; restTemplate.getForObject("http://demo/get", String.class); 第一个参数uri:http://服务名/方法,第二个参数,返回值类型。
也可以使用LoadBalancerClient
@Autowired private LoadBalancerClient loadBalancerClient; ServiceInstance serviceInstance = loadBalancerClient.choose("demo"); String uri = serviceInstance.getUri() + "/get"; restTemplate.getForObject(uri, String.class);
8.问题1:
springloud 如果集成zipkin,由于zipkin的链路追踪,nacos会将zipkin的地址作为一个服务访问,会一直检测zipkin服务,不影响但是会一直打堆栈,目前没有找到方法解决(解决方法,将zipkin的ip作为服务名添加到nacos能够解决,不知道会不会有为问题。), 如果大佬们有方法解决请告知,有偿。
9.问题2:
如果调用不存在的服务,仍然会一直调用服务,报错,打堆栈,和ipkin错误一样