当前位置: 首页 > 工具软件 > Spring Flower > 使用案例 >

07.微服务spring cloud alibaba nacos

皮弘博
2023-12-01

1.spring cloud alibaba(微服务一站式解决方案),包含分布式微服务的组件

只需要少量注解即可实现微服务

 包括 服务治理  nacos=Naming-service注册中心+config-service配置中心
         服务保护  sentinel(熔断器)= sentinel控制台+@SentinelResource
         远程调用 dubbo
         分布式事务  seata = at+tcc+saga+xa
         消息驱动(可搞事务) RocketMQ(java写的)  
         商业化注解(要money) oss(文件存储) sms(发短信)
                            acm  scheduler x(定时任务)

2.不能自己搭配版本看github alibaba文档,还要加spring cloud alibaba版本(本来就有个依赖 spring cloud)

3.语义化版本 1.0.0和1.0.1表示更新小bug ,2.0.0是更新了大版本
//alibaba稳定版本2.2.7.RELEASE
//下载网站github的nacos–>tags—>2.0.3点进去,下载zip解压

4. 使用
      在nacos/conf配置文件:


1.需要mysql,建个数据库nacos 字符集utf8mb4
拖到表执行sql文件,建议5.7版本(!!!我装了8.0直接启动不了)
2.改nacos文件夹的配置文件 application.properties 
    context是默认的路径
  打开 33 36 39 40 41行的注释打开
### Count of DB:
      	spring.datasource.platform=mysql
	  	db.num=1
 		db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
 		db.user.0=root
 		db.password.0=root
4.打开cmd文件会报错因为会打开集群
     cmd文件是可以打开编辑的,批处理文件()
      set MODE="standalone"
5.访问 localhost:8848/nacos/
   数据库users查看用户密码

5.nacos与eureka(服务端版本可以不管)

1.nacos有登录,eureka没有
2.eureka的注册中心,两个项目有相同的模块名称(把项目名称改动即可解决)
nacos 命名空间(隔离,互不影响)
car—>customer-seriver flower---->customer-seriver
分组(两个团队同时开发,谁开发得快有奖金,互不影响)
//选择start.aliyun.com建springboot项目可以选nacos
web依赖和nacos discovery

     3.写配置文件
        server:
               port: 8080
        spring:
               application:
             name: nacas-client-a
               cloud:
                        nacos:  #没有指定命名空间注册到public中,没有指定分组就到DEFAULT_GROUP
                                server-addr: localhost:8848  #注册中心的地址
                                username: nacos  #注册中心用户名
	     					    password: nacos  #密码
	    	  					discovery: 
                                            namespace:  xxid   #在可视化界面创建后的id不是名字
                                            group: A_GROUP   #里面的组名
                                            service: user-service #默认用spring.application的值,这里指定就用这个服务名
     4.主类加注解
        @EnableDiscoveryClient  //开启nacos
     5.写client

6.跨组怎么找服务写clientb写controller看能不能拿到服务列表(秒级发现,比eureka快)

    //同一组名可以相互调用
   @Autowired
     public DiscoveryClientClient discoveryClient;
     @GetMapping("aa")
     public String aa(){
          discoveryClient.getInstances("user-service");
      return "ok"
     }

7.集成openfeign

   //在提供者写controller info方法

   //消费者
   @EnableFeignClients
   //写个feign的文件夹写接口
   @FeignClient(value="user-service")  //写nacos的service名字
   public interface TestFeign{
	@GetMapping("info");
    public String info();

   }

   //在controller看是否调用成功
    @Autowired
     public TestFeign testFeign;
     
     testFeign.info();//在方法里面调用

8.集成gateway,要看清楚哪个接口是哪个服务的(加入即可访问)

//在配置文件写网关配置
//直接在 服务名称/接口即可访问 localhost/nacos-client-a/test

server:
    port: 80
spring:
    application:
        name: gateway
    cloud:
        nacos:
            server-addr: localhost:8848,localhost:8850
            username: nacos
            password: nacos
            discovery:
                namespace: ce9d7e87-fd23-4622-96a9-3893ed689824
                group: ac
        gateway:
            discovery:
                locator:
                    enabled: true  # 开启动态路由
                    lower-case-service-id: true`

9.nacos开启健康检查(加入依赖)

10.nacos的配置项(在nacos图形界面可以改,看文档)

权重
元数据: 可以自己写上让其他服务拿到自定义数据

11.nacos集群(路径不能有中文)(服务之间数据可以相互同步)

   1. application.properties 改成数据库的账号密码
   2. cluster.conf 复制一份去example(每个nacos都加上这个配置)
           #cmd ipconfig,禁用虚拟机,写这个到文件最后一行
              我的ip:8848
               我的ip:8849
                 我的ip:8850
            #端口被占用cmd,kill进程
                   netstat -ano |findstr 8849
                    taskkill /f /t /im 28720
    3.java配置文件 server-addr 写上多个注册地址,即可搭建集群

12.nacos配置文件中心(一个服务需要部署到多台服务器,相同的配置文件,如果要修改,就需要下架服务重新打包,麻烦)
1.在nacos图形界面 按+号,增加配置文件

(改几台也可以,配置文件不放在本地,改了后,配置文件中心去仓库拉取配置文件不用重启!!)
nacos主页–>配置列表–>+ —> 新建配置—>yaml—>随便写点配置文件
hero:
name: 亚索

  2.写个项目加依赖 web和nacos config 写个controller
     @Value("${hero.name}")
      private String name;
     @GetMapping("info")//返回结果
  3.写个文件 bootstrap.yml  //表示可以在云端拉的配置文件
server:
            port: 8081
   spring:
           application:
                     name: nacos-config-a
           cloud:
                nacos:
                       config:
                               username: nacos
                               password: nacos
           	       #namespace: 
                               #group:
                               prefix: nacos-config-a #读哪个配置文件 
                               file-extension: yml #拓展名
                               server-addr: localhost:8848 #配置文件自动放在数

据库持久化
13.改配置文件后不重启刷新配置文件 在entity加

@RefreshScope,后加入到注入即可(后面配置文件直接可以配置)
更多—>历史版本//回滚配置文件,默认组 DEFAUT_GROUP

 类似资料: