springcloud中nacos1.4.1使用详细教程,生产者消费者服务注册,windows环境下演示
使用场景
内容介绍:
将nacos-provide和nacos-consumer注册到Nacos-server,
服务消费者nacos-consumer通过主动轮询获取他所订阅消费的服务信息列表
nacos-consumer根据获取到的服务信息列表,进行服务调用。
本文主要通过两个项目来完成演示:
- nacos-provide:服务提供者
- nacos-consumer:服务消费者
我的环境:
Windows10
JDK8
SpringCloud:Finchley.RELEASE
SpringBoot:2.0.7.RELEASE
spring-cloud-alibaba-dependencies:0.2.2.RELEASE
Nacos-server:1.0.1
注:Nacos针对不同版本的SpingCloud提供不同的依赖,各个版本的对应关系请参考官方文档给出的说明: 版本说明
Nacos-server下载和启动
下载nacos(nacos-server版本1.4.1)
官网下载
Nacos-server可以直接从nacos的github上下载安装包
下载地址:nacos:github的url
网盘下载(windows,linux)
网盘地址:https://pan.baidu.com/s/1dlIB00a463f_fEVsUBpc1Q
提取码:grud
启动nacos
mysql数据库初始化表
- 将下载的zip包解压,找到初始化sql的脚本,创建一个mysql数据库,执行初始化数据库脚本
初始化脚本地址是nacos/conf/nacos-mysql.sql
修改数据库地址配置
配置文件地址:nacos/conf/application.properties
此图是我更改后的
修改启动文件
由于1.4.1默认使用了集群模式 有以下两种解决方式
- 方式一、在cmd 命令框中执行时添加以下参数(每次执行都必须添加)
在cmd命令框中执行 startup.cmd -m standalone - 方法二、修改startup.cmd(一劳永逸 使用内嵌式数据库 推荐该方法)
打开startup.cmd 添加以下代码 set “NACOS_OPTS=%NACOS_OPTS% -Dnacos.standalone=true”
启动
点击nacos/conf/startup.cmd
验证
浏览器访问:http://127.0.0.1:8848/nacos
账号/密码:nacos/nacos
创建生产者和消费者,并且注册nacos
先创建两个项目:springcloudnacosprovider(生产者),springcloudnacosconsumer(消费者)
pom的jar包引入
父类pom引入:
注意springboot,springcloud,nacos的jar包版本很重要,版本不匹配启动项目会报错,具体请查看: 版本说明
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.1.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.3.2.RELEASE</spring-boot.version>
<spring-cloud.version>Hoxton.SR8</spring-cloud.version>
<nacos.version>2.2.5.RELEASE</nacos.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${nacos.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
生产者和消费者pom引入:
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
创建一个生产者(Provider)springboot项目进行配置
生产者(Provider)启动类配置
package com.nacos.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
//开启服务注册发现功能
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class);
}
}
生产者(Provider)定义一个controller
package com.nacos.provider.interfaces.facade;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class ProviderTestController {
//test
@RequestMapping(value = "/helloNacos", method = RequestMethod.GET)
public Object dataListLabel() {
log.info("[LabelController]-[dataListLabel]-[/data/list/label:begin]-[request]");
return "hello nacos";
}
}
生产者(Provider)配置文件application.yml进行如下配置
server:
port: 9527
spring:
application:
name: nacos-provide
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
ok,服务提供者的配置已经完成
创建一个消费者(Consumer)springboot项目进行配置
消费者(Consumer)启动类配置
服务消费者这里按照官方文档中的方式通过 RestTemplate+Ribbon进行服务调用,
package com.nacos.consumer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumerApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class);
}
//httpclient
@Autowired
private RestTemplate restTemplate;
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
@Override
public void run(String... args) throws Exception {
//httpclient调用
String forObject = restTemplate.getForObject("http://nacos-provide/helloNacos", String.class);
System.out.println(forObject);
}
}
消费者(Consumer)配置文件application.yml进行如下配置
server:
port: 9528
spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
ok,服务消费者的创建工作也已完成,下面启动两个项目,进行测试
调用测试
1. 先启动生产者
启动完成后,登录Nacos控制台,你会发现服务列表中,会出现生产者启动的服务
2. 先启动消费者
启动完成后,日志中会出现 hello nacos
总结
完成上面的服务发现和注册的测试后,我的第一感觉是,好像只用修改配置就可以替换Eureka,好像无缝支持SpringCloud ,
带着这个内心的冲击感,我到公司的项目中简单试了下水,居然直接注册成功,并且各个服务之间正常使用,虽然只是单独的服务注册发现功能。但这能够说明Nacos天生就无缝衔接SpringCloud生态(当然他也有很多坑)
看Nacos控制台中的几大分类,明显Nacos的能力绝不仅仅是注册中心这么简单,更多Nacos的使用姿势和坑点,我们未完待续~