Dubbo整合Nacos

Dubbo项目将Nacos作为其注册中心和配置中心

Nacos提供了四个主要功能

  • 服务发现和服务运行状况检查(服务治理):Nacos使服务易于注册自己并通过DNS或HTTP接口发现其他服务。Nacos还提供服务的实时运行状况检查,以防止向不正常的主机或服务实例发送请求。
  • 动态配置管理:动态配置服务使您可以在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新部署应用程序和服务的需求,这使配置更改更加有效和敏捷。
  • 动态DNS服务:Nacos支持加权路由,使您可以更轻松地在数据中心内的生产环境中实施中间层负载平衡,灵活的路由策略,流控制和简单的DNS解析服务。它可以帮助您轻松实现基于DNS的服务发现,并防止应用程序耦合到特定于供应商的服务发现API。
  • 服务和元数据管理(分布式配置):Nacos提供了易于使用的服务仪表板,可帮助您管理服务元数据,配置,kubernetes
    DNS,服务运行状况和指标统计信息。

Nacos既可以作为服务治理中心(可以替代 Spring Cloud Eureka)也可以作为配置中心(可替代 Spring Cloud Config)。
Nacos作为一个单独的服务进行部署,不需要用户搭建项目作为服务治理节点。

Dubbo整合Nacos

服务提供者的相关配置

注入依赖

<!--dubbo依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.6</version>
</dependency>


<!-- Nacos Spring dependency -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>0.0.2</version>
</dependency>


<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>0.6.1</version>
</dependency>


<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
</dependency>


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.1.2.RELEASE</version>
</dependency>

dubbo-provider.xml:以xml形式配置dubbo

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
       http://dubbo.apache.org/schema/dubbo
       http://dubbo.apache.org/schema/dubbo/dubbo.xsd">

    <dubbo:application name="springcloud-alibaba-producer" />

    <dubbo:registry id="nacos_service"  address="nacos://127.0.0.1:8848" timeout="15"/>

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo"  port="20880"  threads="1000" />

    <!-- dubbo监控配置 -->
    <dubbo:monitor protocol="registry" />

    <!-- dubbo管理平台接口 -->
    <bean id="UserService" class="com.luo.producer.service.impl.UserServiceImpl" />
    <dubbo:service interface="com.luo.api.service.IUserService" ref="UserService"  cluster="failfast"
                   registry="nacos_service"   />

</beans>

调用接口

public interface IUserService {
    public String ceshi(String input);
}

服务的实现类

public class UserServiceImpl implements IUserService {
    @Override
    public String ceshi(String input) {
        return "Hello World,"+input;
    }
}

服务调用者的相关配置

注入依赖

<!--dubbo依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo</artifactId>
    <version>2.6.6</version>
</dependency>


<!-- Nacos Spring dependency -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>0.0.2</version>
</dependency>


<dependency>
    <groupId>com.alibaba.nacos</groupId>
    <artifactId>nacos-client</artifactId>
    <version>0.6.1</version>
</dependency>


<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
</dependency>


<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>2.1.2.RELEASE</version>
</dependency>

bootstrap.properties 配置Nacos配置中心

#应用名
spring.application.name=springcloud-alibaba-consumer
#配置文件的前缀
spring.cloud.nacos.config.prefix=springcloud-alibaba-consumer
#当前生效的配置文件
spring.profiles.active=Test

#配置中心路径
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
#配置文件后缀
spring.cloud.nacos.config.file-extension=properties

服务降级的实现类

public class MockUserService implements IUserService {

    public MockUserService(){

    }
    @Override
    public String ceshi(String input) {
        return "服务暂时不可用,请重试";
    }
}

Controller层

@RestController
@RefreshScope
public class DubboComsumerController {

    @Autowired
    IUserService userService;

    @Value("${name:未知者}")
    private String name;

    @RequestMapping("/hello")
    public String hello(){
       return userService.ceshi(name);
    }
}

启动项目,进行验证

第一步:Nacos管理平台,查看到服务的注册信息

在这里插入图片描述

第二步:访问localhost:8081/hello,进行验证
在这里插入图片描述

第三步:配置Nacos分布式配置文件
在这里插入图片描述

第四步:再次访问localhost:8081/hello,进行验证

在这里插入图片描述

第五步:关闭服务提供者后,再次访问:localhost:8081/hello,进行验证
在这里插入图片描述

该项目源码:github

在这里插入图片描述

蹊源的奇思妙想 CSDN认证博客专家 Java Redis 架构
微信公众号:蹊源的奇思妙想
蹊源,一个在IT技术圈和经济学之间的求知者——既对人工智能、物联网等前沿技术兴致勃勃,又对机会成本、边际收益等经济学理论流连忘返。人生是一场孤独的旅行,只是我还是侥幸期待有同路人,我希望认识同样热爱技术、迷恋经济学的你。
<p style="color:#172B4D;"> Spring Boot使用“习惯优于配置”的理念让我们的项目快速运行起来,我们可以不用或者只需要很少的配置就能创建一个独立运行、准生产级别的基于Spring框架的项目。 </p> <p style="color:#172B4D;"> <br /> 我们不禁要问,这么一个优秀的框架,是不是在企业开发中就已经足够了,如果是,那么为什么像BAT这些大公司还要研发自己的交易框架,当然这里面除了核心技术之外,还有两个比较重要的原因:<br /> 第一:像SpringSpring Boot这些开源框架固然很优秀,但却不满足这些大公司对框架的功能要求,如spring scheduler就没有分布式调度能力,阿里研发了自己的tbschedule,以及后来的schedulerx;<br /> 第二:开源框架可以解决具体的领域问题,比如持久化框架Mybatis,RPC框架Dubbo,但是面对业务流程的开发却不是它的强项,以此就诞生了SSM,以及后来的Spring MVC。<br /><br /> 放眼整个java开源世界,不管是功能问题还是业务流程开发问题都有对应框架和组件能满足我们的需求,只要我们的视野足够开阔,能有效的去整合开源组件,足以应付日常的开发。当然我们很难写出像SpringSpring Boot、Mybatis这些优秀的框架,但是我们可以在这个基础之上,进行整合,甚至二次开发,形成公司自己的功能组件或者交易开发框架。<br /><br /> 不客气的说,开源框架的底层少不了spring的身影,那么可以肯定在Spring Boot推出以后,开源框架势必会以Spring Boot作为底层平台进行二次改造,这是趋势,也是必然。本课程顺应潮流,以Spring Boot作为基础平台,充分发挥其特性,抽象业务流程,整合开源组件,降低开发难度,打造出一个功能强大的交易开发框架,简洁,优雅,好用。<br /><br /> 本课程有如下技术特色:<br /> 第一:充分使用Spring Boot的自动装配、条件注解,以及各种使用技巧;<br /> 第二:使用注解@Transaction抽象业务流程,简化交易的定义和执行方式,比SpringMVC更符合业务流程的开发(当然SpringMVC很强大,无贬低之意)<br /> 第三:为使交易具备RPC能力,使用泛化方式集成Dubbo,其好处是服务端不再需要提供接口给客户端使用,简单、高效;<br /> 第四:使用nacos作为服务注册中心,也支持zookeeper;<br /> 第五:为使交易具备Http能力,在Spring MVC的基础上提供HandlerMapping、HandlerAdapter。<br /> 。。。<br /> 一切尽在代码中<br /></p>
相关推荐
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页