dubbo 即是服务提供者又是消费者_使用Nacos做为SpringCloud和Dubbo的共同注册中心

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

a623f0d24f4b49ceb0aeb805e0d9cc9f.png

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

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

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

org.springframework.cloud    spring-cloud-starter-openfeign

接口

@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

依赖

org.springframework.boot    spring-boot-starter-webcom.eyison    nacos-dubbo-cloud-provider-api    1.0-SNAPSHOTorg.springframework.cloud    spring-cloud-starter-alibaba-nacos-discovery0.9.0.RELEASEorg.springframework.cloud    spring-cloud-starter-dubbo    0.9.0.RELEASEorg.springframework.boot    spring-boot-starter-actuatororg.springframework.cloud    spring-cloud-starter-security 

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的错。

@EnableWebSecurityclass 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@EnableDiscoveryClientpublic class NacosDubboCloudProviderApplication {    public static void main(String[] args) {        SpringApplication.run(NacosDubboCloudProviderApplication.class, args);    }}

配置

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

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

依赖

org.springframework.cloud    spring-cloud-starter-openfeignorg.springframework.boot    spring-boot-starter-webcom.eyison    nacos-dubbo-cloud-provider-api    1.0-SNAPSHOTorg.springframework.cloud    spring-cloud-starter-alibaba-nacos-discovery    0.9.0.RELEASEorg.springframework.cloud    spring-cloud-starter-dubbo    0.9.0.RELEASEorg.springframework.boot    spring-boot-starter-actuatororg.springframework.cloud    spring-cloud-starter-security

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

测试类TestController

@RestControllerpublic 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@EnableFeignClientspublic class NacosDubboCloudConsumerApplication {    public static void main(String[] args) {        SpringApplication.run(NacosDubboCloudConsumerApplication.class, args);    }}

配置

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

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

34e07ad667770f0e506288f0ac74b19e.png
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于这个问题,作为一个聊天机器人,我可以提供一些基本的信息,但是对于具体的配置,可能需要您参考相关的文档或者向开发人员寻求帮助。您可以尝试通过以下步骤进行配置: 1. 配置注册中心dubbo的配置文件中,需要指定注册中心的地址和协议等信息,例如: ```xml <dubbo:registry address="nacos://localhost:8848"/> ``` 其中,地址是nacos注册中心的地址,对应的协议是nacos。 2. 配置服务提供者 为了让服务注册注册中心上,服务提供者需要在dubbo的配置文件中指定服务名称和端口号等信息,例如: ```xml <dubbo:service interface="com.example.demo.service.UserService" ref="userService" timeout="5000" version="1.0.0" protocol="dubbo" group="test"/> ``` 其中,interface指定了服务的接口,ref指定了服务的实现类,timeout指定了超时时间,version指定了版本号,protocol指定了协议,group指定了分组名称。 3. 配置服务消费者 服务消费者需要在dubbo的配置文件中指定服务提供者的服务名称和地址等信息,例如: ```xml <dubbo:reference interface="com.example.demo.service.UserService" id="userService" version="1.0.0" protocol="dubbo" check="false"/> ``` 其中,interface指定了要消费的服务接口,id指定了对应的reference的id,version指定了服务的版本号,protocol指定了协议,check指定了是否检查服务提供者是否已经启动。 以上是一些基本的配置信息,具体的配置内容可能因项目而异。希望这些信息可以帮助到您。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值