Nacos注册中心注册Dubbo和springboot

目录

1.Nacos下载安装

1.1 下载

1.2 解压

1.3创建表

1.4 修改启动脚本startup.cmd

1.5 使用startup.cmd来启动nacos 

1.6 登录 nacos,访问nacos管理页面 

2、dubbo整合nacos

2.1服务生产者

2.2服务消费者

3、Springboot整合nacos(http)

4、Nacos配置 中心

5、Nacos脑裂


 项目地址:https://gitee.com/itzhl/nacosDemo.git

1.Nacos下载安装

1.1 下载

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

选择一个最新的稳定版本。zip是Windows版本,tar.gz是Linux版本

1.2 解压

下载完成之后,解压,进入目录,如下:

其中,

bin:可执行命令;

conf:配置文件;

target:nacos应用jar包;

nacos运行起来之后,还会有data、logs

data:数据;

logs:运行日志

1.3创建表

config下的nacos-mysql.sql 是建表语句,在数据库中建一个nacos库,执行sql建表。

修改配置application.properties的数据库配置,如图所示,nacos项目的根目录是/nacos,启动端口为8848。

1.4 修改启动脚本startup.cmd

nacos默认使用的集群模式cluster,本机需要修改为单机模式standalone。

1.5 使用startup.cmd来启动nacos 

1.6 登录 nacos,访问nacos管理页面 

nacos的根路径为/nacos,默认端口号为8848。因此后台的访问路径为:http://localhost:8848/nacos

账号密码都是:nacos。

可以作为配置中心:

服务列表查看服务:

不同的命名空间,可以区分环境

2、dubbo整合nacos

2.1服务生产者

pom文件

父项目

<properties>
    <spring.boot.version>2.2.4.RELEASE</spring.boot.version>
    <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
    <spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
</properties>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>${spring.boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring.cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <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>
    </dependencies>
</dependencyManagement>

子项目:

<dependencies>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
    </dependency>

    <!--        nacos-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

</dependencies>

配置文件:

对外暴露的服务地址写在配置文件中。

server:
  port: 8080
  
spring:
  application:
    name: nacos-server
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        #命名空间
        namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d

dubbo:
  consumer:
    timeout: 600000
  scan:
    #自己向外提供服务的service的包地址
    base-packages: com.example.service
  protocol:
    #dubbo协议
    name: dubbo
    #dubbo 协议端口( -1 表示自增端口,从 20880 开始)
    port: -1
  #注册到nacos注册中心
  registry:
    address: nacos://localhost:8848
    register: true
    subscribe: true

启动类添加注解

@EnableDiscoveryClient
@EnableDubbo
@SpringBootApplication

提供service类和方法,项目打包以便于消费者引用

2.2服务消费者

配置文件

server:
  port: 8081

spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d
dubbo:
  consumer:
    timeout: 600000
#  scan:
    #自己向外提供服务的service的包地址
#    base-packages: com.pubinfo.project.service
  protocol:
    #dubbo协议
    name: dubbo
    #dubbo 协议端口( -1 表示自增端口,从 20880 开始)
    port: -1
  #注册到nacos注册中心
  registry:
    address: nacos://localhost:8848
    register: true
    subscribe: true

pom文件和启动类注解与提供者相同,需要引入生产者的包。

使用:@Reference注解直接注入服务提供者的service类,直接调用。

3、Springboot整合nacos(http)

3.1服务生产者

pom文件与启动类注解同上

配置文件

server:
  port: 8082
spring:
  application:
    name: nacos-server
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: 6fd5e05a-bf43-41b7-ad90-833e030956ae

提供接口

3.2服务消费者

pom依赖同上,新增一个loadbalancer:

<!-- 服务名访问,(负载均衡)-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>

为了http请求,创建RestTemplate,加注解@LoadBalanced

 

使用http方式请求生产者,地址使用生产者在服务中心注册的名称

4、Nacos配置 中心

涉及更新方式就有2种,推和拉;

  1. 客户端主动从服务端定时拉取配置,如果有变化则进行替换。
  2. 服务端主动把变化的内容发送给客户端。

两种方式各有利弊,比如对于推的模式来讲,就需要服务端与客户端进行长连接,那么这种就会出现服务端需要耗费大量资源维护这个链接,并且还得加入心跳机制来维护连接有效性。而对于拉的模式则需要客户端定时去服务端访问,那么就会存在时间间隔,也就保证不了数据的实时性。那nacos采用哪种模式呢?nacos是采用了拉模式是一种特殊的拉模式,也就是我们通常听的长轮询机制。

nacos服务端收到请求后检查配置是否发生变化,如果没有则开启定时任务,延迟29.5s执行。

微服务要拉取nacos中管理的配置,并且与本地的application.yml配置合并,才能完成项目启动。

但如果尚未读取application.yml,又如何得知nacos地址呢?

因此spring引入了一种新的配置文件:bootstrap.yaml文件,会在application.yml之前被读取,流程如下:

application.yml可以全部放入配置中心,bootstrap.yml配置注册中心:

spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml  #指定yaml格式的配置
        group: DEFAULT_GROUP
        namespace: 16699661-8b2c-4b27-926a-a1aecdaa122d
        refresh-enabled: true
  profiles:
    active: dev

使用注解热加载,修改配置可以实时生效@RefreshScope

5、Nacos脑裂

        脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”。裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。

        在leader选举的时候,需要半数投票通过才能选举成为leader;公式:节点投票数>总节点数/2。或者说不低于:size/2+1。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用 DubboSpring Boot + Nacos 项目中需要进行以下步骤: 1. 引入 DubboNacos 相关依赖 ``` <!-- Dubbo --> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>${dubbo.version}</version> </dependency> <!-- Nacos --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>${spring.cloud.alibaba.nacos.discovery.version}</version> </dependency> ``` 其中,`${dubbo.version}` 和 `${spring.cloud.alibaba.nacos.discovery.version}` 分别为 DubboNacos 的版本号。 2. 配置 DubboNacos 在 `application.properties` 或 `application.yml` 中进行 DubboNacos 的配置,下面是一个示例: ``` # Dubbo dubbo.application.name=example-provider dubbo.registry.address=nacos://localhost:8848 dubbo.protocol.name=dubbo dubbo.protocol.port=20880 dubbo.scan.base-packages=com.example.service # Nacos spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.cloud.nacos.discovery.namespace= ``` 其中,`com.example.service` 为需要进行 Dubbo 暴露的服务所在的包路径。 3. 编写 Dubbo 服务提供者 编写 Dubbo 服务提供者,需要使用 `@Service` 注解标注暴露的服务实现类,示例代码如下: ``` @Service(interfaceClass = HelloService.class) public class HelloServiceImpl implements HelloService { @Override public String sayHello(String name) { return "Hello, " + name; } } ``` 其中,`interfaceClass` 参数为需要暴露的服务接口。 4. 编写 Dubbo 服务消费者 编写 Dubbo 服务消费者,需要使用 `@Reference` 注解注入 Dubbo 服务实例,示例代码如下: ``` @RestController public class HelloController { @Reference(interfaceClass = HelloService.class) private HelloService helloService; @GetMapping("/hello") public String hello(@RequestParam String name) { return helloService.sayHello(name); } } ``` 其中,`interfaceClass` 参数为需要调用的 Dubbo 服务接口。 5. 启动应用程序 启动应用程序,Dubbo 服务提供者会自动注册Nacos 服务注册中心Dubbo 服务消费者会自动从 Nacos 服务注册中心获取 Dubbo 服务提供者的地址,并进行调用。 以上就是在 Spring Boot + Nacos 项目中使用 Dubbo 的步骤和示例代码。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值