首先下载一个nacos服务器
(这里有个大大的坑,nacos和springboot的版本问题,要保持一一对应)
这里我用的是代码片
.
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.4.RELEASE</version>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
<!--nacos是1.0.0-->
下载nacos的地址:https://github.com/alibaba/nacos/releases
进去之后是选这个tags
接下来就是选版本了
进去之后朝下翻下载zip就行了
下载好,解压,这个不用安装解压就行
启动可以双击startup.cmd就启动了,(但是我的就起不来,我用的命令行启动的 startup.cmd -m standalone)
进去之后输入命令就起来了(有可能会遇到一个问题大概意思就是需要jdk ,这个得去环境变量设置一下JAVA_HOME, 一般学java第一步就是设置这,不会自行百度)
接下来就可以去浏览器访问了localhost:8848/nacos
账号密码都是nacos
服务现在就弄好了,接下来就是配置问题了
这里说明一下,无论是提供者还是消费者配置一样的在,这里我就描述一遍
第一步导依赖
代码片
.
<!--nacos的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>
第二步去配置代码片
.
spring
application:
name: nacos-provider
cloud:
nacos:
discovery:
# namespace: 7968f11f-799a-4668-acb4-fb73e4bf8e74
server-addr: 127.0.0.1:8848
#这个命名空间是怎么都找不到服务的情况下加的,加了之后能找到了,这点我很迷惑,如果你也有和我一样是情况可以试试
第三步搁启动类加注解@EnableDiscoveryClient
代码片
.
@SpringBootApplication
@EnableDiscoveryClient
public class FirstApplication {
public static void main(String[] args) {
SpringApplication.run(FirstApplication.class, args);
}
}
有一点特殊的,这是搁消费者的启动类里面加的restTemplate,他是spring提供的发各种http请求的工具,这样消费者才能调用提供者的接口
因为bean的注入只能放在配置类里,启动类也是配置类,所以放这里面了
代码片
.
@SpringBootApplication
@EnableDiscoveryClient
//@EnableFeignClients
public class MytwoApplication {
public static void main(String[] args) {
SpringApplication.run(MytwoApplication.class, args);
}
@LoadBalanced//开启负载均衡,如果有两个服务一样的名,就会根据nacos的方法自行匹配访问哪个服务的接口
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
基本配置完成之后启动服务就能在nacos客户端看见了
接下来就是服务提供者的方法,其实就是正常的controller层的方法代码片
.
@RestController
public class ProviderController {
@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String sayHi() {
return "hello ,我是提供者";
}
}
然后就是消费者要去调用提供者的接口
代码片
.
@RestController
public class ConsumerController {
private final RestTemplate restTemplate;
@Autowired
public ConsumerController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@RequestMapping(value = "/getHi", method = RequestMethod.GET)
public String echo() {
return "我是消费者"+ ",后面是我调用提供者的结果 " + restTemplate.getForObject("http://nacos-provider/hi", String.class);
}
}
下面就是单独访问自己的项目了,我的消费者的端口是8081
因为我源代码多了点东西所以图有点不符
说明,虽然作为了服务的提供者,但是不影响原来的接口被其他浏览器访问,互不影响。
总结以下我遇到的坑,配置nacos最先注意的是版本问题,版本不兼容就会报错,还难找,第二就是配置三步走的问题,少了某一步也会报错,不注意的也难找(重灾区就是配置文件里面)