springcloud Alibaba 笔记11 nacos注册中心 -nacos单例化

Nacos

前四个字母分别为Naming和Configuration的前两个字母,最后的s为Service
Nacos: Dynamic Naming and Configuration Service
Nacos = Eureka+Config+Bus

1. 去哪下:
https://github.com/alibaba/Nacos
2. 官网文档:
https://nacos.io/zh-cn/index.html
https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery	
3. 与其他注册中心的区别

CAP原则又称CAP定理,指的是在一个分布式系统中,一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
在这里插入图片描述
在这里插入图片描述

4. 下载与安装、启动
4.1 windows 版本

官网选择一个稳定版下载
https://github.com/alibaba/nacos/releases/tag/1.4.3
在这里插入图片描述
安装后解压安装包,
直接运行bin目录下的startup.cmd
命令运行成功后直接访问http://localhost:8848/nacos
默认账号密码都是nacos
页面:
在这里插入图片描述

4.2 docker版本

Docker 下载安装Nacos, 暂用 1.4.1

docker pull nacos/nacos-server:1.4.1

Nacos 启动:
单例1

docker run -d  --name nacos -p 8848:8848 --env MODE=standalone --env NACOS_SERVER_IP=192.168.226.128 nacos/nacos-server:1.4.1

单例2

docker run -d -it \
-e PREFER_HOST_MODE=ip \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \ (要依赖的容器)
-e MYSQL_SERVICE_HOST=127.0.0.1 \ (当前mysql容器IP地址)
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \(要连接的数据库)
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=123456 \(用root用户登录连接虚拟机时的密码)
-p 8848:8848 \
--name nacos \
---- 这里注释掉,不保持启动  --restart=always \ 
nacos/nacos-server:1.4.1

在这里插入图片描述

原文链接:https://blog.csdn.net/m0_53151031/article/details/123118920

集群

docker run -d --name nacos-cluster -p 8848:8848 \
  --env NACOS_SERVERS=192.168.226.128,192.168.226.128,192.168.226.128 \
  --env NACOS_SERVER_IP=192.168.226.128 \
  --env SPRING_DATASOURCE_PLATFORM=mysql \
  --env MYSQL_SERVICE_HOST=127.0.0.1 \
  --env MYSQL_SERVICE_DB_NAME=mysql \
  --env MYSQL_SERVICE_USER=root \
  --env MYSQL_SERVICE_PASSWORD=123456 \
  --env MYSQL_DATABASE_NUM=1 \
  nacos/nacos-server:1.4.1

参数说明:

NACOS_SERVERS : 集群节点信息
NACOS_SERVER_IP : 服务IP,多网卡模式下建议指定
SPRING_DATASOURCE_PLATFORM : 使用数据库类型
MYSQL_SERVICE_HOST : MySQL数据库地址
MYSQL_SERVICE_DB_NAME : 数据库名称
MYSQL_SERVICE_DB_NAME : 数据库用户名
MYSQL_SERVICE_PASSWORD : 数据库密码
MYSQL_DATABASE_NUM : 数据库数量,默认就是1,可以不填写
至此集群就搭建完成。可以通过docker日志命令查询nacos的日志信息(docker logs -ft --tail 200 nacos-cluster )。

登录:

http://192.168.226.128:8848/nacos
账号:nacos
密码:nacos
5. 基于Nacos的服务提供者provider
5.1 pom.xml

父pom文件,添加如下依赖

      <!--Spring cloud alibaba 2.1.0.RELEASE-->
      <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>

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>cloud2020</artifactId>
        <groupId>com.pyh.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-providerzk-payment8004</artifactId>

    <dependencies>
        <!--        Springboot 整合zookeeper客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>com.pyh.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>
5.2 application.yaml
server:
  port: 9001
spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.226.128:8848   # 配置 nacos 地址
management:
  endpoints:
    web:
      exposure:
        include: "*"    # 暴露监控端点
5.3 controller
package com.pyh.springcloud.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "server port:"+serverPort + "\t id:"+id;
    }
}
5.4 添加另一个服务9002,从9001 拷贝出来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 基于Nacos的服务消费者consumer
6.1 pom, 与5.1的一样
6.2 yaml
server:
  port: 83
spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.226.128:8848   # 配置 nacos 地址
management:
  endpoints:
    web:
      exposure:
        include: "*"  # 暴露监控端点
# 消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者), 可以在程序运行时@Value来调用
service-url:
  nacos-user-service: http://nacos-payment-provider
6.3 Configuration, 切记要加上@LoadBalanced
package com.pyh.springcloud.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class MyConfig {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}
6.4 controller
@RestController
@Slf4j
public class OrderNacosController {

    @Value("${service-url.nacos-user-service}")
    private String serviceURL;

    @Resource
    private RestTemplate restTemplate;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String getPaymentInfo(@PathVariable("id") Integer id){
        return restTemplate.getForObject(serviceURL+"/payment/nacos/"+id,String.class);
    }
}
6.5 结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值