• Spring Cloud Alibaba:Nacos服务注册


    安装(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'
    
  • 相关阅读:
    iOS 日期格式
    时间复杂度、空间复杂度
    转载 -- 算法题
    奇奇怪怪的Bug
    iOS12中推送通知新特性
    iOS开发网络篇—Socket编程
    iOS:菜单控制器和菜单项:UIMenuController和UIMenuItem
    关于textField输入光标颜色及cleanButton大小和颜色的设置
    腾讯云开发微信小程序使用体验
    简单理解JavaScript原型链
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/13629969.html
Copyright © 2020-2023  润新知