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

不了解此套教程的可以移步之前章节
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序列化。
在这里插入图片描述

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

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

dubbo:
  protocol:
    serialization: kryo

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

在这里插入图片描述
这里推荐一个插件,可以自动生成序列ID
在这里插入图片描述

发布了27 篇原创文章 · 获赞 4 · 访问量 903

猜你喜欢

转载自blog.csdn.net/weixin_42126468/article/details/104081644
今日推荐