java Nacos
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: 9124application:name: nacosProject
spring:profiles:active: dev
nacos:config:server-addr: 127.0.0.1:8848discovery: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;@NacosInjectedprivate NamingService namingService;@PostConstructpublic 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;}@NacosInjectedprivate 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: openfeignProjectcloud: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 {@AutowiredProviderClient 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: nacosProjectcloud:nacos:discovery: #注册server-addr: 127.0.0.1:8848config: # 配置中心server-addr: 127.0.0.1:8848file-extension: ymlconfig:import:# nacosProject-dev.yml 与nacos中dataId一致- nacos:nacosProject-dev.ymlprofiles: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);}}