栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

微服务SpringCloud Alibaba ------(四)环境搭建并集成nacos-discovery

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

微服务SpringCloud Alibaba ------(四)环境搭建并集成nacos-discovery

Spring Cloud Alibaba中文文档地址
https://github.com/alibaba/spring-cloud-alibaba/wiki

1. 本次使用版本

Spring Cloud Version Hoxton.SR9
Spring Cloud Alibaba Version 2.2.6.RELEASE
Spring Boot Version 2.3.2.RELEASE
版本关系见

https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

2. 引入依赖

修改项目的pom.xml,原parent标签可以删除


		
			
			
				com.alibaba.cloud
				spring-cloud-alibaba-dependencies
				${spring.cloud.alibaba.version}
				pom
				import
			

			
			
				org.springframework.boot
				spring-boot-starter-parent
				${spring.boot.version}
				pom
				import
			

			
			
				org.springframework.cloud
				spring-cloud-dependencies
				${spring.cloud.version}
				pom
				import
			
		
	
另一种初始化方式

浏览器地址https://start.aliyun.com/bootstrap.html或在idea中通过https://start.aliyun.com来创建

3. nacos服务端 3.1. 什么是nacos

官方: 一个更易于构建云原生应用的动态服务发现(Nacos Discovery)、服务配置(Nacos Config)和服务管理平台。

3.2. nacos文档

官网

Spring Cloud Alibaba Nacos Discovery

Spring Cloud Alibaba Nacos Config

3.2. 注册中心演变及其设计思想
  1. 服务存在ip:port变更可能以及水平扩容后的地址管理。
    手动使用注册表配合nginx负载均衡来解决
  2. 服务宕机,nginx自身无服务监控(可搭配中间件实现),另一方面,大量的配置服务带来的配置文件,运维变得困难。
    使用注册中心
3.2.1. 注册中心设计思想

通过Mysql存储服务信息

  1. 服务启动时调用注册接口,insert注册表
  2. 定时任务去注册中心获取服务列表,select注册表并缓存
  3. 根据上一步获取的列表来进行服务调用
  4. 服务定时发送心跳至注册中心
  5. 服务关闭时调用注销接口
3.2.2. 主流注册中心对比

3.2. 下载地址

nacos版本参考官方版本关系
https://github.com/alibaba/nacos/releases

3.3. 启动nacos

本次使用windos版本的nacos
nacos默认使用集群模式启动,单机模式在bin目录下使用下方命令

startup.cmd -m standalone

或者修改bin目录下修改startup.cmd

set MODE="standalone"

之后直接双击startup.cmd

3.3.1. 控制台地址

默认地址 http://192.168.0.102:8848
默认账号 nacos
默认密码 nacos

3.3.2. 通过mysql保存数据
  1. 修改conf目录下application.properties
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
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
  1. 创建数据库后执行conf目录下的nacos-mysql.sql
4.项目集成nacos-discovery 4.1. 服务注册发现
  1. 修改项目pom.xml添加依赖

	com.alibaba.cloud
	spring-cloud-starter-alibaba-nacos-discovery
	${spring.cloud.alibaba.version}

  1. 启动类添加@EnableDiscoveryClient注解
@SpringBootApplication
//Spring Cloud 原生注解 ,开启服务注册发现功能
@EnableDiscoveryClient
public class StockApplication {

    public static void main(String[] args) {
        SpringApplication.run( StockApplication.class, args );
    }

}
  1. application.yml中添加配置
spring:
  cloud:
    # 参考 https://github.com/alibaba/spring-cloud-alibaba/blob/master/spring-cloud-alibaba-docs/src/main/asciidoc-zh/nacos-discovery.adoc#%E5%85%B3%E4%BA%8E-nacos-discovery-starter-%E6%9B%B4%E5%A4%9A%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9%E4%BF%A1%E6%81%AF
    nacos:
      discovery:
        # Nacos Server 启动监听的ip地址和端口
        server-addr: 127.0.0.1:8848
        # 注册的服务名
        service: stock-service
        # 命名空间ID,Nacos通过不同的命名空间来区分不同的环境,进行数据隔离,服务消费时只能消费到对应命名空间下的服务。
        namespace: public
        # 是否为临时实例,如果不是临时实例那么宕机后实例不会被删除
#        ephemeral: true
        # 当要上阿里云时,阿里云上面的一个云账号名
#        access-key:
        # 当要上阿里云时,阿里云上面的一个云账号密码
#        secret-key:
        # 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
#        metadata:
        # 注册的端口,默认情况下不用配置,会自动探测,默认值-1
#        port: -1
        # 注册的IP地址,优先级最高
#        ip:
        # 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
#        network-interface:
        # 取值范围 1 到 100,数值越大,权重越大,默认1
#        watch: 1
        # 日志文件名
#        log-name:
        # Nacos集群名称
#        cluster-name:
        # 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
#        endpoint:
        # 是否集成Ribbon,一般都设置成true即可
#        enabled: true
  1. 启动服务后在nacos控制台可以查看到该服务
4.2. 通过服务名称调用服务以及负载均衡

在4.1.的基础上进行修改

  1. 修改启动类,添加代码
// ribbon客户端负载均衡注解
@LoadBalanced
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder){
    RestTemplate restTemplate = builder.build();
    return restTemplate;
}
  1. 调用服务的代码通过服务名称调用
String result = restTemplate.getForObject("http://服务名称/*/*", String.class);

可以通过启动多个服务实例后调用测试负载均衡

5. 代码

https://download.csdn.net/download/qq_42017523/44992268

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/572086.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号