欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

微服务解决方案 -- Spring Cloud Alibaba (八)Dubbo 服务消费者

程序员文章站 2022-07-05 23:14:55
...

不了解此套教程的可以移步之前章节
1.微服务解决方案 – Spring Cloud Alibaba (一)服务的注册与发现
2.微服务解决方案 – Spring Cloud Alibaba (二)服务提供者
3.微服务解决方案 – Spring Cloud Alibaba (三)服务消费者(Feign)
4.微服务解决方案 – Spring Cloud Alibaba (四)服务熔断
5.微服务解决方案 – Spring Cloud Alibaba (五)分布式配置中心
6.微服务解决方案 – Spring Cloud Alibaba (六)Dubbo远程过程调用
7.微服务解决方案 – Spring Cloud Alibaba (七)Dubbo 服务提供者

服务消费者


与提供者的pom文件基本保持一直

    <dependencies>
        <!-- Spring Boot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot -->
        <!-- Apache Dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.spring</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <!-- Apache Dubbo -->
        <!-- Projects -->
        <dependency>
            <groupId>com.laoshiren</groupId>
            <artifactId>hello-apache-dubbo-provider-api</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!-- Projects -->
    </dependencies>
spring:
  application:
    name: dubbo-provider
  main:
    allow-bean-definition-overriding: true
dubbo:
  scan:
    base-packages: com.laoshiren.apache.dubbo.provider.service
  protocol:
    name: dubbo
    ## -1 自动分配端口号
    port: 20880
  registry:
    address: nacos://192.168.0.108:8848

入口类

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

调用provider,我们需要用@Reference注解,这里的是org.apache.dubbo.config.annotation包下的

	@Reference(version = "1.0.0")
    private EchoService echoService;

    @GetMapping(value = "/echo/{string}")
    public String echo(@PathVariable String string) {
        return echoService.echo(string);
    }

首先确保nacos正常启动,然后启动Provider,最后启动Consumer

高速序列化


Dubbo 中支持的序列化方式:

  1. json 序列化:一种是采用的阿里的 fastjson 库。
  2. java 序列化: 主要是采用 JDK 自带的 Java 序列化实现,性能很不理想。

在Dubbo中使用高效的Java序列化(Kryo和FST)

当然,在对一个类做序列化的时候,可能还级联引用到很多类,比如Java集合类。针对这种情况,我们已经自动将JDK中的常用类进行了注册,所以你不需要重复注册它们(当然你重复注册了也没有任何影响),包括:

GregorianCalendar
InvocationHandler
BigDecimal
BigInteger
Pattern
BitSet
URI
UUID
HashMap
ArrayList
LinkedList
HashSet
TreeSet
Hashtable
Date
Calendar
ConcurrentHashMap
SimpleDateFormat
Vector
BitSet
StringBuffer
StringBuilder
Object
Object[]
String[]
byte[]
char[]
int[]
float[]
double[]

由于注册被序列化的类仅仅是出于性能优化的目的,所以即使你忘记注册某些类也没有关系。事实上,即使不注册任何类,Kryo和FST的性能依然普遍优于hessian和dubbo序列化。
微服务解决方案 -- Spring Cloud Alibaba (八)Dubbo 服务消费者

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-serialization-kryo</artifactId>
</dependency>

注意消费者和提供者都需要添加此依赖。

dubbo:
  protocol:
    serialization: kryo

如果你需要返回一个自定义的实体类,记得加上序列化接口,最好生成serialVersionUID

微服务解决方案 -- Spring Cloud Alibaba (八)Dubbo 服务消费者
这里推荐一个插件,可以自动生成序列ID
微服务解决方案 -- Spring Cloud Alibaba (八)Dubbo 服务消费者