专栏首页服务端技术使用Nacos做为SpringCloud和Dubbo的共同注册中心
原创

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

【转载请注明出处】:https://cloud.tencent.com/developer/article/1643353

公司以前的系统都是基于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://cloud.tencent.com/developer/article/1643353

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 使用Nacos做为SpringCloud的注册中心

    【转载请注明出处】:https://cloud.tencent.com/developer/article/1642606

    后端老鸟
  • 关于offsetX、layerX、clientX、screenX以及pageX

    【转载请注明出处】:https://blog.csdn.net/huahao1989/article/details/107775411

    后端老鸟
  • 用SkyWalking做分布式追踪和应用性能监控系统

    【转载请注明出处】:https://cloud.tencent.com/developer/article/1655702

    后端老鸟
  • 线上CPU飙升100%问题排查,一篇足矣

    对于互联网公司,线上CPU飙升的问题很常见(例如某个活动开始,流量突然飙升时),按照本文的步骤排查,基本1分钟即可搞定!特此整理排查方法一篇,供大家参考讨论提高...

    Java_老男孩
  • Nginx location匹配规则

    如果匹配规则以^开头,就是匹配以指定字符串开头的路径,如果没有就是匹配url中的内容是否包含指定字符串

    JouyPub
  • Spring 异常处理的各种姿势

    统一的异常处理对于应用的重要性不言而喻。今天我们来介绍一下 Spring 如何来进行统一的 Rest 异常处理。同时我们也会简单比较一下它们之间的优劣。

    码农小胖哥
  • 性能工具之Java调试工具BTrace入门

    在我们对Java应用做问题分析的时候,往往采用log进行问题定位和分析,但是如果我们的log缺乏相关的信息呢?远程调试会影响应用的正常工作,修改代码重新部署应用...

    高楼Zee
  • #!/bin/bash 与#!/bin/sh

    hive脚本如下(日表): #!/bin/bash #     /*% ******************************************...

    学到老
  • #!/bin/bash 与#!/bin/sh

    hive脚本如下(日表): #!/bin/bash #     /*% ******************************************...

    学到老
  • 检测阿根廷恰加斯病潜在高流行地区(Computers and Society)

    本文提出了一种具有高空间分集性的恰加斯病(ChD)潜在患病率地图。它的目的是检测大查科生态区域化(恰加斯病的高度地方化)以外的地区,其特征是与恰加斯病高度相关和...

    李欣颖6837176

扫码关注云+社区

领取腾讯云代金券