使用Nacos做为SpringCloud和Dubbo的共同注册中心

简介: 使用同一个接口,既可以用Dubbo的方式调用,也可以用Feign来调用。

【转载请注明出处】:https://juejin.im/post/5ee250bf5188254323350c83

公司以前的系统都是基于Dubbo的分布式架构,后来的新业务逐渐采用了SpringCloud微服务架构,在相互的业务调用中都是提供http接口供各自调用,但是总感觉很别扭,现在有了阿里开源的Nacos就可以解决很多问题。最终要实现的效果就是同一个接口,既可以用Dubbo的方式调用,也可以用Feign来调用,覆盖当前的这种场景。
image.png

此时服务提供者即注册了 Dubbo 又注册了 Http 服务,服务消费者根据配置方式可以在 Dubbo 与 Http 调用中随意切换。

1、接口nacos-dubbo-cloud-provider-api

接口API做为服务提供者和消费者的共同依赖,将接口不仅暴露为RestAPI,做为Feign的客户端,也按照Dubbo协议注册。
依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

接口

@FeignClient("nacos-dubbo-cloud-provider-service")
public interface EchoRestDubboService {

    @GetMapping("/echoRestDubbo")
    String echo(@RequestParam String name);
}

nacos-dubbo-cloud-provider-service是服务提供者的应用名。

2、服务提供者nacos-dubbo-cloud-provider-service

依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.eyison</groupId>
    <artifactId>nacos-dubbo-cloud-provider-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-security</artifactId>
 </dependency>

EchoRestDubboService的实现类

@RestController
@Service(version = "1.0.0", protocol = {"dubbo"})
public class EchoRestDubboServiceImpl implements EchoRestDubboService {

    private final Logger logger = LoggerFactory.getLogger(EchoRestDubboServiceImpl.class);

    @Override
    public String echo(String name) {

        logger.info("echo rest dubbo :{}", name);
        return "hello " + name;
    }
}

WebSecurity配置
这个必须得配置,否则Dubbo启动的时候会报EndPoint的错。

@EnableWebSecurity
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/**");
        super.configure(web);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.authorizeRequests()
                .requestMatchers(EndpointRequest.to("health", "info")).permitAll();
        super.configure(http);
    }
}

启动类NacosDubboCloudProviderApplication

@SpringBootApplication
@EnableDiscoveryClient
public class NacosDubboCloudProviderApplication {

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

配置

server:
  port: 8021
spring:
  application:
    name: nacos-dubbo-cloud-provider-service
  main:
      allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
dubbo:
  scan:
    base-packages: com.eyison.service
  protocols:
    dubbo:
      name: dubbo
      port: -1
  registry:
    address: spring-cloud://localhost
feign:
  hystrix:
    enabled: true

3、服务消费者nacos-dubbo-cloud-consumer

依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>com.eyison</groupId>
    <artifactId>nacos-dubbo-cloud-provider-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-dubbo</artifactId>
    <version>0.9.0.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-security</artifactId>
</dependency>

WebSecurity配置类同上,这里不再重复。

测试类TestController

@RestController
public class TestController {
  
    @Reference(version = "1.0.0", protocol = "dubbo")
    private EchoRestDubboService echoDubboService;

    @Autowired
    private EchoRestDubboService echoRestService;

    @GetMapping("/echoDubbo")
    String echoDubbo(String name) {
        return echoDubboService.echo(name);
    }

    @GetMapping("/echoRest")
    String echoRest(String name) {
        return echoRestService.echo(name);
    }

}

启动类

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosDubboCloudConsumerApplication {

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

}

配置

server:
  port: 8011
spring:
  application:
    name: nacos-dubbo-cloud-consumer
  main:
      allow-bean-definition-overriding: true
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
dubbo:
  application:
    qos:
      port: 33333
  registry:
    address: spring-cloud://localhost
  cloud:
    subscribed-services: nacos-dubbo-cloud-provider-service
logging:
  level:
    org.apache.dubbo: debug
    com.netflix: debug

依次启动服务提供者和服务消费者,然后访问消费者的两个接口可以看到都能成功,而且通过观察日志,分别是通过Dubbo的RPC和Feign调用的。

【转载请注明出处】: https://juejin.im/post/5ee250bf5188254323350c83

相关文章
|
人工智能 Java API
Nacos 3.1.0 正式发布,支持 A2A 注册中心与 MCP 注册协议增强
3.1.0 发布核心全新功能-Agent 注册中心,助力构建基于 A2A 协议的多 Agent 协作的AI应用,同时 MCP 注册中心适配最新 MCP 官方注册中心协议及升级优化多项核心功能。
2818 91
|
负载均衡 Kubernetes 网络协议
注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
这是小卷对分布式系统架构学习的第9篇文章,继续探讨注册中心的原理及选型。文章详细介绍了Eureka、Nacos的工作机制与特点,并对比了Eureka、Nacos、Consul和Zookeeper在一致性协议、健康检查、负载均衡等方面的差异。最后根据不同的应用场景给出了注册中心的选型建议,帮助读者理解如何选择最适合的注册中心。
1646 100
|
JSON Java Nacos
SpringCloud 应用 Nacos 配置中心注解
在 Spring Cloud 应用中可以非常低成本地集成 Nacos 实现配置动态刷新,在应用程序代码中通过 Spring 官方的注解 @Value 和 @ConfigurationProperties,引用 Spring enviroment 上下文中的属性值,这种用法的最大优点是无代码层面侵入性,但也存在诸多限制,为了解决问题,提升应用接入 Nacos 配置中心的易用性,Spring Cloud Alibaba 发布一套全新的 Nacos 配置中心的注解。
2168 166
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
2079 181
|
Cloud Native Java Nacos
springcloud/springboot集成NACOS 做注册和配置中心以及nacos源码分析
通过本文,我们详细介绍了如何在 Spring Cloud 和 Spring Boot 中集成 Nacos 进行服务注册和配置管理,并对 Nacos 的源码进行了初步分析。Nacos 作为一个强大的服务注册和配置管理平台,为微服务架构提供
5304 14
|
SpringCloudAlibaba 负载均衡 Dubbo
【SpringCloud Alibaba系列】Dubbo高级特性篇
本章我们介绍Dubbo的常用高级特性,包括序列化、地址缓存、超时与重试机制、多版本、负载均衡。集群容错、服务降级等。
2226 7
【SpringCloud Alibaba系列】Dubbo高级特性篇
|
SpringCloudAlibaba JavaScript Dubbo
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
本文介绍了 Dubbo-Admin 的安装和使用步骤。Dubbo-Admin 是一个前后端分离的项目,前端基于 Vue,后端基于 Spring Boot。安装前需确保开发环境(Windows 10)已安装 JDK、Maven 和 Node.js,并在 Linux CentOS 7 上部署 Zookeeper 作为注册中心。
4498 1
【SpringCloud Alibaba系列】Dubbo dubbo-admin安装教程篇
|
SpringCloudAlibaba Dubbo Java
【SpringCloud Alibaba系列】Dubbo基础入门篇
Dubbo是一款高性能、轻量级的开源Java RPC框架,提供面向接口代理的高性能RPC调用、智能负载均衡、服务自动注册和发现、运行期流量调度、可视化服务治理和运维等功能。
1110 1
【SpringCloud Alibaba系列】Dubbo基础入门篇
|
Java 网络安全 Nacos
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评
Nacos作为流行的微服务注册与配置中心,其稳定性与易用性广受好评。然而,“客户端不发送心跳检测”是使用中常见的问题之一。本文详细探讨了该问题的原因及解决方法,包括检查客户端配置、网络连接、日志、版本兼容性、心跳检测策略、服务实例注册状态、重启应用及环境变量等步骤,旨在帮助开发者快速定位并解决问题,确保服务正常运行。
438 5
|
网络安全 Nacos 开发者
Nacos作为流行的微服务注册与配置中心,“节点提示暂时不可用”是常见的问题之一
Nacos作为流行的微服务注册与配置中心,其稳定性和易用性备受青睐。然而,“节点提示暂时不可用”是常见的问题之一。本文将探讨该问题的原因及解决方案,帮助开发者快速定位并解决问题,确保服务的正常运行。通过检查服务实例状态、网络连接、Nacos配置、调整健康检查策略等步骤,可以有效解决这一问题。
532 4