windows下载nacos,版本2.x的,1.0的话会出现“Server check fail, please check server 127.0.0.1 ,port 9848 is available , error ={}” 这个鬼问题
下载链接
这里用的是2.0.4版本,启动的话用 startup.cmd -m standalone,单体启动,要不然直接点击启动的话会报错
boot
这里服务端用的boot的,导入依赖
<!-- Nacos 组件依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-discovery-spring-boot-starter</artifactId>
<version>0.2.3</version>
</dependency>
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>0.2.3</version>
</dependency>
配置文件
server:
port: 9124
application:
name: nacosProject
spring:
profiles:
active: dev
nacos:
config:
server-addr: 127.0.0.1:8848
discovery:
server-addr: 127.0.0.1:8848
启动类上加,这里的WARE_ID,是 Data Id,对应上
@NacosPropertySource(dataId = "WARE_ID", autoRefreshed = true)
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(Application.class);
ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
}
}
nacos页面上添加配置
然后代码config
import com.alibaba.nacos.api.annotation.NacosInjected;
import com.alibaba.nacos.api.exception.NacosException;
import com.alibaba.nacos.api.naming.NamingService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import javax.annotation.PostConstruct;
@Configuration
public class NacosConfig {
@Value("${server.port}")
private int serverPort;
@Value("${spring.application.name}")
private String applicationName;
@NacosInjected
private NamingService namingService;
@PostConstruct
public void registerInstance() throws NacosException {
namingService.registerInstance(applicationName, "127.0.0.1", serverPort);
}
}
控制层中
@RestController
public class Controller {
@GetMapping("/test")
public Rs tt(){
return Rs.success("11");
}
@NacosValue(value = "${MyName:null}", autoRefreshed = true)
private String myName;
@NacosValue(value = "${project:null}", autoRefreshed = true)
private String project;
@ApiOperation(value="查询配置信息")
@GetMapping(value = "/info")
public String info () {
return myName+":"+project;
}
@NacosInjected
private NamingService namingService;
@ApiOperation(value="查询服务列表")
@GetMapping(value = "/getServerList")
public List<Instance> getServerList (@RequestParam String serviceName) {
try {
return namingService.getAllInstances(serviceName) ;
} catch (Exception e){
e.printStackTrace();
}
return null ;
}
}
然后启动服务,再页面查看是否正常
这个就可以了,然后消费
消费用的cloud
创建项目,主项目依赖pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.1</version>
</parent>
<groupId>com.tt</groupId>
<artifactId>nacosTt</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>test1</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<!--springboot的版本-->
<spring.boot.version>2.6.6</spring.boot.version>
<!--SpringCloud alibaba的版本-->
<spring.cloud.alibaba.version>2021.0.4.0</spring.cloud.alibaba.version>
<!--SpringCloud的版本-->
<spring.cloud.version>2021.0.4</spring.cloud.version>
<!--mybatisPlus的版本-->
<mybatis_plus.version>3.5.2</mybatis_plus.version>
<mysql.version>8.0.28</mysql.version>
<lombok.version>1.18.24</lombok.version>
<druid.version>1.2.9</druid.version>
<fastjson.version>2.0.19</fastjson.version>
</properties>
<dependencyManagement>
//这三必须要
<dependencies>
<!-- Spring Boot Dependencies -->
<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>${spring.cloud.alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子项目创建,依赖,这里用的openfeign调用
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>nacosTt</artifactId>
<groupId>com.tt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>test1</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!-- Nacos 组件依赖 -->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
</dependencies>
</project>
配置文件
# application.yaml
spring:
application:
name: openfeignProject
cloud:
nacos:
config:
server-addr: http://127.0.0.1:8848
server:
port: 9125
启动类,添加@EnableFeignClients
package com.tt;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
/**
* @author lhd
*/
@EnableFeignClients
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication springApplication = new SpringApplication(Application.class);
ConfigurableApplicationContext configurableApplicationContext = springApplication.run(args);
}
}
然后调用
package com.tt.tt.controller;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@FeignClient("nacosProject")
public interface ProviderClient {
@GetMapping("/test")
String hi();
}
控制层调用
package com.tt.tt.controller;
import com.tt.tt.common.Rs;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Controller {
@Autowired
ProviderClient providerClient;
@GetMapping("/test1")
public Rs tt(){
return Rs.success(providerClient.hi());
}
}
添加cloud服务端
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>nacosTt</artifactId>
<groupId>com.tt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>nacos</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos 组件依赖 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
</dependencies>
</project>
application.yml
# application.yaml
spring:
application:
name: nacosProject
cloud:
nacos:
discovery: #注册
server-addr: 127.0.0.1:8848
config: # 配置中心
server-addr: 127.0.0.1:8848
file-extension: yml
config:
import:
# nacosProject-dev.yml 与nacos中dataId一致
- nacos:nacosProject-dev.yml
profiles:
active: dev # 拉取dev配置文件
server:
port: 9124
控制层调用
@RestController
public class Controller {
//project.MyName 与 配置内容中属性一直即可
@Value("${project.MyName}")
private String name;
@GetMapping("/test")
public Rs tt(){
return Rs.success(name);
}
}