安装(docker)
docker pull nacos/nacos-server
#备注:MODE=standalone 单机模式运行
docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server
然后访问http://192.168.10.137:8848/nacos/,账号密码默认都是nacos
服务注册
引入nacos依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件properties:
server.port=9001
spring.application.name=nacos-payment-provider
spring.cloud.nacos.discovery.server-addr=192.168.10.137:8848
management.endpoints.web.exposure.include=*
主启动类,以及controller
@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain9001.class,args);
}
}
@RestController
public class PaymentController {
@Value("${server.port}")
private String port;
@GetMapping(value = "/payment/nacos/{id}")
public String echo(@PathVariable Integer id) {
return "Hello Nacos Discovery :id ="+id+":port="+port;
}
}
启动后,打开nacos,发现服务已经注册进nacos:
然后拷贝虚拟端口映射,点击copy configuration
修改一些属性:
然后Services中出现了刚才配置的一个服务,启动它
观察nacos,同一个微服务名字下有两个实例。
nacos负载均衡
nacos默认是支持负载均衡的,其中依赖了Netflix-Ribbon包
下面新建一个服务消费者
配置文件
server.port=83
spring.application.name=nacos-order-consumer
spring.cloud.nacos.discovery.server-addr=192.168.10.137:8848
management.endpoints.web.exposure.include=*
主启动类省略(需要导入open-feign依赖),controller和service接口如下:
@RestController
public class OrderController {
@Value("${server.port}")
private String port;
@Autowired
private PaymentService paymentService;
@GetMapping(value = "/order/nacos/{id}")
public String echo(@PathVariable Integer id) {
return paymentService.getPaymentById(id);
}
}
@Component
@FeignClient("nacos-payment-provider")
public interface PaymentService {
@GetMapping("/payment/nacos/{id}")
public String getPaymentById(@PathVariable("id") Integer id);
}
运行三个服务提供者以及一个服务消费者,发现三个服务提供者轮流提供服务,也证明了nacos默认支持负载均衡。
服务注册中心对比
nacos支持AP和CP模式的切换,C是所有节点在同一时间看到的数据是一致的,A是所有的请求都收到响应
curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'