Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
nacos-sever下载地址
<properties>
<spring-boot.version>2.0.4.RELEASEspring-boot.version>
<spring-cloud.version>Finchley.RELEASEspring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>${spring-boot.version}version>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>${spring-cloud.version}version>
<exclusions>
<exclusion>
<groupId>com.alibaba.nacosgroupId>
<artifactId>nacos-clientartifactId>
exclusion>
exclusions>
dependency>
<dependency>
<groupId>com.alibaba.nacosgroupId>
<artifactId>nacos-clientartifactId>
<version>1.1.0version>
dependency>
<dependency>
<groupId>org.hibernategroupId>
<artifactId>hibernate-validatorartifactId>
<version>5.1.0.Finalversion>
dependency>
dependencies>
# 应用使用端口
server.port=8070
# 应用名
spring.application.name=service-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
@SpringBootApplication
// 使得这个应用可以被nacos发现
@EnableDiscoveryClient
public class NacosConsumerApplication {
// 如果有多个服务就通过负载均衡的方式调用不同的服务,负载均衡具体的方式有:轮询、随机、hash等等
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@RestController
public class TestController {
private final RestTemplate restTemplate;
@Autowired
public TestController(RestTemplate restTemplate) {this.restTemplate = restTemplate;}
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
// 通过restTemplate在nacos中找到应用名为service-provide的一个服务,并调用它的echo方法,同时指定返回类型为String
return restTemplate.getForObject("http://service-provider/echo/" + str, String.class);
}
}
}
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderApplication.class, args);
}
@RestController
class EchoController {
// 提供了一个服务,既可以自己使用,也可以其他应用使用
@RequestMapping(value = "/echo/{string}", method = RequestMethod.GET)
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}
关于控制台的启动,看我上一篇文章——nacos配置使用(一看就会),确定不看看?
<properties>
<spring-boot.version>2.0.4.RELEASEspring-boot.version>
<nacos-discovery-spring-boot.version>0.2.1nacos-discovery-spring-boot.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>${spring-boot.version}version>
dependency>
<dependency>
<groupId>com.alibaba.bootgroupId>
<artifactId>nacos-discovery-spring-boot-starterartifactId>
<version>${nacos-discovery-spring-boot.version}version>
dependency>
dependencies>
# nacos服务注册中心的地址
nacos.discovery.server-addr=127.0.0.1:8848
@Controller
@RequestMapping("discovery")
public class DiscoveryController {
// 通过服务名获取对应的 应用列表
@NacosInjected
private NamingService namingService;
@RequestMapping(value = "/get", method = GET)
@ResponseBody
public List<Instance> get(@RequestParam String serviceName) throws NacosException {
// 这里可以进行扩展可以先自己获取应用列表,然后自己选择其中的一些执行他们的方法(接口)
return namingService.getAllInstances(serviceName);
}
}
@SpringBootApplication
public class NacosDiscoveryApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryApplication.class, args);
}
}
curl http://localhost:8080/discovery/get?serviceName=example # 调用controller的discovery/get接口获取实例
此时还没有服务
# 通过put的方式向其中注册一个应用名字为example的应用以及它的地址+端口
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=example&ip=127.0.0.1&port=8080'
➜ bin curl http://localhost:8080/discovery/get\?serviceName\=example
[{"instanceId":"127.0.0.1#8080#DEFAULT#DEFAULT_GROUP@@example","ip":"127.0.0.1","port":8080,"weight":1.0,"healthy":true,"cluster":{"serviceName":null,"name":"","healthChecker":{"type":"TCP"},"defaultPort":80,"defaultCheckPort":80,"useIPPort4Check":true,"metadata":{}},"service":null,"metadata":{}}]%
此时就有结果了。
nacos是一个非常不错的服务注册中心,但是在使用restTemplate或者feign进行服务调用的时候,有些不方便(http://service-provider/get ,后续将更新dubbo,以及dubbo中好用的服务调用以及nacos如何集成dubbo的服务调用