spring-cloud alibaba 集成nacos

spring-cloud alibaba 集成nacos

下载nacos

下载地址 : https://github.com/alibaba/nacos

启动nacos命令

在bin目录下使用cmd命令输入以下指令

startup -m standalone  
# standalone为启动单机

登录nacos

登录地址在黑窗口上

spring-cloud alibaba 集成nacos_第1张图片

默认账号密码为 : nacos

父工程依赖

 <parent>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-parentartifactId>
        <version>2.3.9.RELEASEversion>
        <relativePath/>
    parent>

    <properties>
        <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
        <java.version>1.8java.version>
        <spring-cloud.version>Hoxton.SR10spring-cloud.version>
        <mysql.version>5.1.47mysql.version>
        <mybatis.version>2.1.1mybatis.version>
    properties>

    <dependencyManagement>
        <dependencies>
            
            <dependency>
                <groupId>org.springframework.cloudgroupId>
                <artifactId>spring-cloud-dependenciesartifactId>
                <version>${spring-cloud.version}version>
                <type>pomtype>
                <scope>importscope>
            dependency>

            <dependency>
                <groupId>com.alibaba.cloudgroupId>
                <artifactId>spring-cloud-alibaba-dependenciesartifactId>
                <version>2.2.5.RELEASEversion>
                <type>pomtype>
                <scope>importscope>
            dependency>
            
            <dependency>
                <groupId>mysqlgroupId>
                <artifactId>mysql-connector-javaartifactId>
                <version>${mysql.version}version>
            dependency>
            
            <dependency>
                <groupId>org.mybatis.spring.bootgroupId>
                <artifactId>mybatis-spring-boot-starterartifactId>
                <version>${mybatis.version}version>
            dependency>
        dependencies>
    dependencyManagement>

子工程 依赖 (需要两个进行互相调用)

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
        dependency>
        
        <dependency>
            <groupId>org.mybatis.spring.bootgroupId>
            <artifactId>mybatis-spring-boot-starterartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
        dependency>
    dependencies>
server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/user?useSSL=false
    username: root
    password: root
    driver-class-name: com.mysql.jdbc.Driver

  application:
    name: user-service
  cloud:
    nacos:
    # nacos地址
      server-addr: localhost:8848
mybatis:
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS

config文件

  @LoadBalanced
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

service

@Service
public class OrderService {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private OrderMapper orderMapper;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        //调用的地址
        String url = "http://user-service/user/" + order.getUserId();

        User user = restTemplate.getForEntity(url, User.class).getBody();
        order.setUser(user);

        // 4.返回
        return order;
    }
}

配置集群

当微服务项目部署多个地域,我们进行访问的时候距离越远延迟就会越高。我们这边可以对项目进行集群的配置,然后在项目中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务,本地集群找不到提供者,才去其它集群寻找,并且会报警告。同集群的不同服务间随机调用

spring:
	cloud:
    	nacos:
      		server-addr: localhost:8848
     		 discovery:
     		   cluster-name: TZ
# 配置的负载均衡规则
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

权重

当我们的机器配置不是特别好的话可以将注册在nacos中的模块减少权重来达到减少请求次数

spring-cloud alibaba 集成nacos_第2张图片

spring-cloud alibaba 集成nacos_第3张图片

临时实例和非临时实例

服务注册到Nacos时,可以选择注册为临时或为临时实例,通过下面的配置来设置:

spring:
	cloud:
		nacos:
		discovery:
			ephemeral: false # 设为非临时实例

临时实例和非临时实例的区别

  • 临时实例:临时实例的模块会发送心跳到nacos客户端,当心跳停止的时候(临时实例模块挂掉了),Nacos会将这个实例删除
  • 非临时实例(耗费Nacos服务的性能,不推荐):Nacos会发送心跳到非临时实例的模块上,当非临时实例挂掉的时候,Nacos检测到这个模块挂掉了,但是也不会进行删除这个实例,并且会持续发送心跳到这个实例中。

Eureka和Nacos的区别

  1. Nacos与eureka的共同点
    都支持服务注册和服务拉取
    都支持服务提供者心跳方式做健康检测
  2. Nacos与Eureka的区别
    Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
    Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

你可能感兴趣的:(spring,cloud,微服务)