欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Quarkus集成Dubbo服務(wù)Rpc遠程通訊框架整合

 更新時間:2022年02月22日 15:03:13   作者:kl  
這篇文章主要為大家介紹了Quarkus集成Dubbo服務(wù)Rpc遠程通訊框架的整合,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

dubbo是一個流行的使用廣泛的服務(wù)治理型RPC框架,博主所在公司,大量服務(wù)都是使用dubbo來暴露和調(diào)用的,如果想要使用quarkus替換spring boot來做業(yè)務(wù)系統(tǒng),肯定要在quarkus中解決dubbo集成的問題。好在dubbo的設(shè)計比較優(yōu)良,除了提供在spring環(huán)境下的自動裝備加載,還可以通過手動編程的方式集成dubbo。不過,如果確定使用quarkus作為主要的開發(fā)框架的話,最終的目標應(yīng)該是將服務(wù)直接注冊到k8s的service中,就不需要dubbo或者grpc這種遠程通訊框架了。

引入dubbo依賴

<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.7</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-context-support</artifactId>
                    <groupId>com.alibaba.spring</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-aop</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-expression</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
            <version>1.1.3</version>
        </dependency>

這里引入了dubbo的依賴和nacos注冊中心的依賴,注意可以排除spring的那些依賴,在quarkus環(huán)境中,spring的包一點用都沒有,只會增加應(yīng)用的體積

定義接口和實現(xiàn)

public interface TestService {
    String hello(String name);
}
@Singleton
@Startup
class TestServiceImpl implements TestService {
    @Override
    public String hello(String name) {
        System.err.println(Thread.currentThread().getName());
        return "hello " + name;
    }
}

熟悉dubbo的用戶肯定清楚,一般情況下,我們會新增一個項目模塊,專門用來定義api接口,這個模塊單獨打jar包,方便給其他的項目引入,這里為了演示方便,所以我將api接口和具體實現(xiàn)都寫在一個文件里了。

定義接收dubbo的配置

@ConfigProperties(prefix = "quarkus.dubbo")
public class DubboProperties {
    private String name;
    private String registrAddress;
    private Protocol protocol;
    public static class Protocol {
        private Integer port;
        private String name = "dubbo";
    }
}

這個類用來映射application.properties中的dubbo配置,這里只定義了基本的配置屬性,其他都可以使用默認值,更多的配置屬性看需求可以在這里新增,上面的代碼為了博文的篇幅考慮簡化了get和set代碼。定義好后,可以在配置文件中新增如下配置:

quarkus.dubbo.name = kl
quarkus.dubbo.registr-address = nacos://nacos-xxx.com:80
quarkus.dubbo.protocol.name = dubbo
quarkus.dubbo.protocol.port  = 20330

應(yīng)用啟動時,創(chuàng)建DubboProperties實例,并將配置文件中的相關(guān)配置設(shè)置到對應(yīng)的屬性中,在需要的地方可以通過構(gòu)造函數(shù)或者@Inject注解自動注入

dubbo組件配置

@Dependent
@Startup
public class DubboConfig {
    private final DubboProperties dubboProperties;
    public DubboConfig(DubboProperties dubboProperties) {
        this.dubboProperties = dubboProperties;
    }
    @Produces
    private ApplicationConfig applicationConfig(){
        ApplicationConfig config = new ApplicationConfig();
        config.setName(dubboProperties.getName());
        return config;
    }
    @Produces
    private RegistryConfig registryConfig(){
        RegistryConfig config = new RegistryConfig();
        config.setAddress(dubboProperties.getRegistrAddress());
        return config;
    }
    @Produces
    private ProtocolConfig protocolConfig(){
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName(dubboProperties.getProtocol().getName());
        protocol.setPort(dubboProperties.getProtocol().getPort());
        return protocol;
    }
}

這里通過構(gòu)造函數(shù)注入的方式,引用了前面定義的dubbo配置實例,通過配置,可以實例化出ApplicationConfig、RegistryConfig、ProtocolConfig等實例,這里創(chuàng)建實例時,只設(shè)置了最基本的dubbo屬性,更多的屬性配置擴展可以在這個地方修改。這里的三個實例是保留dubbo服務(wù)和引入dubbo服務(wù)不可或缺的三個重要組件,具體的用法繼續(xù)往下看

 dubbo提供者配置

@Dependent
@Startup
public class DubboProviderConfig {
    @Inject
    ApplicationConfig applicationConfig;
    @Inject
    RegistryConfig registryConfig;
    @Inject
    ProtocolConfig protocolConfig;
    @Inject
    TestService testService;
    @PostConstruct
    public void init() {
        Map<Class, Object> beans = new HashMap<>(6);
        beans.put(TestService.class, testService);
        beans.forEach(this::registerDubboService);
    }
    private void registerDubboService(Class clz, Object obj) {
        ServiceConfig<Object> service = new ServiceConfig<>();
        service.setApplication(applicationConfig);
        service.setRegistry(registryConfig);
        service.setProtocol(protocolConfig);
        service.setInterface(clz);
        service.setRef(obj);
        service.setVersion("1.0.0");
        service.export();
    }
}

可以看到,上面定義的三個dubbo配置組件,都出現(xiàn)在了dubbo提供者配置里,這三個組件是組成dubbo serviceConfig的一部分。因為沒有spring自動掃描dubbo注解獲取bean實例,所以在quarkus中,需要手動聲明和注冊dubbo服務(wù),這里通過@PostConstruct應(yīng)用啟動后的構(gòu)造函數(shù)來觸發(fā)dubbo的服務(wù)注冊暴露動作,然后把所有的需要暴露成dubbo服務(wù)的接口都統(tǒng)一放入map容器里,然后迭代map完成dubbo服務(wù)暴露。

dubbo消費者配置

@Dependent
@Startup
public class DubboConsumerConfig {
    @Inject
    ApplicationConfig applicationConfig;
    @Inject
    RegistryConfig registryConfig;
    @Produces
    public DingSMSService testService1() {
        return this.referenceService(DingSMSService.class);
    }
    private <T> T referenceService(Class<T> clazz) {
        ReferenceConfig<Object> reference = new ReferenceConfig<>();
        reference.setApplication(applicationConfig);
        reference.setRegistry(registryConfig);
        reference.setInterface(clazz);
        reference.setVersion("1.0.0");
        return (T)reference.get();
    }
}

dubbo里的消費者,就是引入遠程服務(wù)。首先需要在自己的項目中添加服務(wù)提供方的api依賴,然后通過ReferenceConfig配置,可以得到接口的代理實現(xiàn),這里,也需要用到應(yīng)用配置和注冊中心的配置組件。最后通過@Produces注解,將api實例注冊到本地quarkus的bean上下文中,完成后就可以通過@Inject注解注入直接使用dubbo服務(wù)了,如:

@Path("/dingservice")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public class TestResource {
    @Inject
    DingSMSService smsService;
    @GET
    public String send(@QueryParam("msg")String msg){
        smsService.sendDing("1330741xxxx",msg,"kl");
        return "發(fā)送成功";
    }
}

結(jié)語

完成了quarkus和dubbo的集成后,博主看到了quarkus在這邊落地的希望,雖然最終的目標是面向容器編程,但是在全部遷移上容器的過程中,肯定還需要兼容dubbo這種遠程通訊方式的,相比于spring中的dubbo使用,quarkus目前只能手動注冊服務(wù)和引入服務(wù),博主嘗試過使用BeanManager來進一步的自動化發(fā)布dubbo服務(wù),但是沒能找像spring中g(shù)etBean(Type)這類的方法。相信隨著對Quarkus和CDI的深入了解,這塊也會有突破,那個時候就可以像spring中那么使用dubbo了

以上就是Quarkus集成Dubbo服務(wù)Rpc遠程通訊框架整合的詳細內(nèi)容,更多關(guān)于Quarkus集成Dubbo服務(wù)Rpc遠程通訊框架的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java SerialVersionUID作用詳解

    Java SerialVersionUID作用詳解

    這篇文章主要介紹了Java SerialVersionUID作用詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • springBoot基于webSocket實現(xiàn)掃碼登錄

    springBoot基于webSocket實現(xiàn)掃碼登錄

    最近做了個新項目,涉及到掃碼登錄。之前項目使用的是 ajax輪詢的方式。感覺太low了。所以這次用webSocket的方式進行實現(xiàn),感興趣的可以了解一下
    2021-06-06
  • 微服務(wù)?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能

    微服務(wù)?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能

    這篇文章主要介紹了微服務(wù)?Spring?Boot?整合?Redis?BitMap?實現(xiàn)?簽到與統(tǒng)計功能,文章簡單介紹了Redis BitMap 基本用法結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2023-01-01
  • Java基于面向?qū)ο髮崿F(xiàn)一個戰(zhàn)士小游戲

    Java基于面向?qū)ο髮崿F(xiàn)一個戰(zhàn)士小游戲

    這篇文章主要為大家詳細介紹了Java如何基于面向?qū)ο髮崿F(xiàn)一個戰(zhàn)士小游戲,文中的示例代碼講解詳細,感興趣的小伙伴可以動手嘗試一下
    2022-07-07
  • Java設(shè)計模式之命令模式(Command模式)介紹

    Java設(shè)計模式之命令模式(Command模式)介紹

    這篇文章主要介紹了Java設(shè)計模式之命令模式(Command模式)介紹,本文講解了Command模式的定義、如何使用命令模式等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • java正則實現(xiàn)各種日期格式化

    java正則實現(xiàn)各種日期格式化

    本文給大家分享的是使用java結(jié)合正則表達式來實現(xiàn)各種日期的格式化功能,代碼非常的簡單,有需要的小伙伴可以參考下。
    2015-05-05
  • Spring的Eureka續(xù)約(心跳檢測)詳解

    Spring的Eureka續(xù)約(心跳檢測)詳解

    這篇文章主要介紹了Spring的Eureka續(xù)約(心跳檢測)詳解,eureka?client每隔一定的時間,會給eureka?server發(fā)送心跳,保持心跳,讓eureka?server知道自己還活著,需要的朋友可以參考下
    2023-11-11
  • Java中自增和自減操作符(++/--)的那些事

    Java中自增和自減操作符(++/--)的那些事

    這篇文章主要給大家介紹了關(guān)于Java中自增和自減操作符(++/--)的那些事,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-02-02
  • Java生成二維碼的兩種實現(xiàn)方式(基于Spring?Boot)

    Java生成二維碼的兩種實現(xiàn)方式(基于Spring?Boot)

    這篇文章主要給大家介紹了關(guān)于Java生成二維碼的兩種實現(xiàn)方式,文中的代碼基于Spring?Boot,本文基于JAVA環(huán)境,以SpringBoot框架為基礎(chǔ)開發(fā),文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-07-07
  • 帶你了解Java的類和對象

    帶你了解Java的類和對象

    下面小編就為大家?guī)硪黄胬斫釰ava類和對象。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-09-09

最新評論