Nacos+Spring Boot+Dubbo原生整合 例子

Nacos+Spring Boot+Dubbo原生整合 例子

前言

我一共搭建了3个环境。
整体入口:
https://blog.csdn.net/lwb314/article/details/108222433

正文

这种方式基本就是用nacos官网+dubbo官网的例子,自己硬搭的一个,特别别扭。
主要看的是下边2页
Nacos官网的nacos-dubbo
https://nacos.io/zh-cn/docs/use-nacos-with-dubbo.html
dubbo官网的注解配置
http://dubbo.apache.org/zh-cn/docs/user/configuration/annotation.html
依赖如下:
我是用的spring boot作为了spring 容器和服务监听,像nacos官网,那么写也行,但是我觉得麻烦,所以用了Spring Boot,也是为了整合,因为我的大部分程序都是基于Spring Boot写的

<!--spring boot版本-->
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.9.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
</parent>
<!--下边是依赖,用的是dubbo原生最新版-->
<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.8</version>
        </dependency>

服务提供者代码-provider

import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.PropertySource;



@PropertySource(value = "classpath:/provider-config.properties")
@EnableDubbo(scanBasePackages = "com.lwb.providerdubbodemo.dubbo")
@SpringBootApplication
public class ProviderDubboDemoApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext app = SpringApplication.run(ProviderDubboDemoApplication.class, args);
    }
}

服务类代码

import com.lwb.DubboDemoService;
import org.apache.dubbo.config.annotation.Service;

@Service(version = "${demo.service.version}")
public class DubboDemoServiceImpl implements DubboDemoService {
    @Override
    public String helloDubbo() {
        return "helloDubbo";
    }
}

服务接口

public interface DubboDemoService {
    public String helloDubbo();
}

application.properties
就设置了一个启动端口,没了

server.port=8001

provider-config.properties配置

dubbo.application.name=microservice
dubbo.registry.address=nacos://10.10.171.249:8848
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

# Provider @Service version
demo.service.version=1.0.0
demo.service.name = demoService

这里说一下我觉得是坑的地方:

  1. dubbo.application.name这个注解改不了服务名,在nacos里的服务名是providers:com.lwb.DubboDemoService:1.0.0:,只有在详情里可以看见application=microservice,跟spring.application.name这个可以自定义服务名完全不一样,可气的是spring.application.name这个属性还不能写,写了报错。
    下边是服务发布完的截图,有大神知道这种方式下怎么改,帮我留个言,谢谢。
    在这里插入图片描述

  2. 必须要有一个provider-config.properties,我实验了把dubbo的配置写在application.properties里会报错,当然我没敢实验把这个注解直接改成application.properties像这样,没试,感觉路子太野肯定成功不了。
    @PropertySource(value = “classpath:/application.properties”)

  3. 最后一个是version,不写会报错就是@service里那个,但是我看挺多例子都没写,但是我这个例子我不写就报错了,不知道为什么,不知道是不是我用的dubbo版本太新了,这个也比较好理解,就是一个接口可能有多个版本并行的情况,这个时候版本号就必须要有了。

服务调用者代码-consumer

import com.lwb.DubboDemoService;
import org.apache.dubbo.config.annotation.Reference;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;

import javax.annotation.PostConstruct;

@EnableDubbo
@PropertySource(value = "classpath:/consumer-config.properties")
@SpringBootApplication
public class ConsumerDubboDemoApplication {

    @Reference(version = "${demo.service.version}")
    private DubboDemoService demoService;

    @PostConstruct
    public void init() {
        String a=  demoService.helloDubbo();
        System.out.println(a);
    }

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

    }

}

启动直接可以打印结果

application.properties,换个服务启动端口

server.port=8002

consumer-config.properties,里边的注解仔细看吧

## Dubbo Application info
dubbo.application.name = dubbo-consumer-demo

## Nacos registry address
dubbo.registry.address = nacos://10.10.171.249:8848
##主要是下边这3个属性,因为最新的dubbo自带一个监控进程默认端口22222
##你要么关了qos服务,要么换个端口
##要不刚才的dubbo-provider程序就把你本机的22222端口占用了
##consumer就启动不了了
dubbo.application.qosEnable=true
dubbo.application.qosPort=33333
dubbo.application.qosAcceptForeignIp=false


# @Reference version
demo.service.version= 1.0.0

这里说一下坑:

  1. @Reference的version属性 必须写,不写报错。
  2. 因为使用原生dubbo的关系,.properties文件没法提示相关的属性,只能自己从官网上粘贴下来,然后改一改。
Spring Boot使用“习惯优于配置”的理念让我们的项目快速运行起来,我们可以不用或者只需要很少的配置就能创建一个独立运行、准生产级别的基于Spring框架的项目。 我们不禁要问,这么一个优秀的框架,是不是在企业开发中就已经足够了,如果是,那么为什么像BAT这些大公司还要研发自己的交易框架,当然这里面除了核心技术之外,还有两个比较重要的原因: 第一:像SpringSpring Boot这些开源框架固然很优秀,但却不满足这些大公司对框架的功能要求,如spring scheduler就没有分布式调度能力,阿里研发了自己的tbschedule,以及后来的schedulerx; 第二:开源框架可以解决具体的领域问题,比如持久化框架Mybatis,RPC框架Dubbo,但是面对业务流程的开发却不是它的强项,以此就诞生了SSM,以及后来的Spring MVC。 放眼整个java开源世界,不管是功能问题还是业务流程开发问题都有对应框架和组件能满足我们的需求,只要我们的视野足够开阔,能有效的去整合开源组件,足以应付日常的开发。当然我们很难写出像SpringSpring Boot、Mybatis这些优秀的框架,但是我们可以在这个基础之上,进行整合,甚至二次开发,形成公司自己的功能组件或者交易开发框架。 不客气的说,开源框架的底层少不了spring的身影,那么可以肯定在Spring Boot推出以后,开源框架势必会以Spring Boot作为底层平台进行二次改造,这是趋势,也是必然。本课程顺应潮流,以Spring Boot作为基础平台,充分发挥其特性,抽象业务流程,整合开源组件,降低开发难度,打造出一个功能强大的交易开发框架,简洁,优雅,好用。 本课程有如下技术特色: 第一:充分使用Spring Boot的自动装配、条件注解,以及各种使用技巧; 第二:使用注解@Transaction抽象业务流程,简化交易的定义和执行方式,比SpringMVC更符合业务流程的开发(当然SpringMVC很强大,无贬低之意) 第三:为使交易具备RPC能力,使用泛化方式集成Dubbo,其好处是服务端不再需要提供接口给客户端使用,简单、高效; 第四:使用nacos作为服务注册中心,也支持zookeeper; 第五:为使交易具备Http能力,在Spring MVC的基础上提供HandlerMapping、HandlerAdapter。 。。。 一切尽在代码中
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页