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

基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼

 更新時(shí)間:2022年04月12日 10:08:18   作者:m0_67402013  
這篇文章主要介紹了基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn),從泛化調(diào)用實(shí)現(xiàn)的過程來看,我們可以對自己提供所有服務(wù)進(jìn)行測試,不需要引入調(diào)用的接口,減少代碼的侵入,需要的朋友可以參考下

Dubbo的泛化調(diào)用不需要引入調(diào)用方的接口,只需要指定接口的全類名,就可以調(diào)用服務(wù),一般用于框架集成。接下來就基于SpringBoot實(shí)現(xiàn)了Dubbo的泛化調(diào)用。

1、服務(wù)端定義

1.1 服務(wù)定義及實(shí)現(xiàn)

package com.smart.springboot.api;
public interface HelloServiceFacade {
    void sayHello();
}
package com.smart.springboot.service;
import com.alibaba.dubbo.config.annotation.Service;
import com.smart.springboot.api.HelloServiceFacade;
/**
 * @author : cuantianhou 2020/1/14
 */
@Service(version = "1.0.0",timeout = 20000)
public class HelloService implements HelloServiceFacade {
    @Override
    public void sayHello() {
        System.out.println("123");
    }
}

1.2 服務(wù)提供者配置

package com.smart.springboot.config;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author : cuantianhou 2020/4/1
 */
@Configuration
public class DubboServiceConfig {
    @Bean
    public ApplicationConfig applicationConfig(){
        ApplicationConfig applicationConfig = new ApplicationConfig();
        applicationConfig.setId("springboot-dubbo-provider");
        applicationConfig.setName("springboot-dubbo-provider");
        return applicationConfig;
    }
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setPort(20880);
        protocolConfig.setName("dubbo");
        return protocolConfig;
    }
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://ip1:2181?backup=ip2:2181");
        registryConfig.setCheck(false);
        return registryConfig;
    }
    @Bean
    public MonitorConfig monitorConfig() {
       MonitorConfig monitorConfig = new MonitorConfig();
       monitorConfig.setProtocol("registry");
       return monitorConfig;
    }
}

1.3 啟動(dòng)類

package com.smart.springboot;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 啟動(dòng)類
 *
 * @author : cuantianhou 2020/1/14
 */
@SpringBootApplication
@DubboComponentScan("com.smart.springboot")
public class SpringBootDubboProvider {
    public static void main(String[] args) {
        SpringApplication.run(SpringBootDubboProvider.class,args);
    }
}

1.4 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.smart.springboot</groupId>
    <artifactId>springboot-dubbo-provider</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!--引入dubbo環(huán)境-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
        <dependency>
            <groupId>com.smart.springboot</groupId>
            <artifactId>springboot-dubbo-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

2、消費(fèi)端定義

2.1 Dubbo配置類

package com.smart.springboot.config;
import com.alibaba.dubbo.config.*;
import com.alibaba.dubbo.rpc.service.GenericService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * @author : cuantianhou 2020/4/1
 */
@Configuration
public class DubboConsumerConfig {
    @Bean
    public ApplicationConfig applicationConfig(){
     ApplicationConfig applicationConfig = new ApplicationConfig();
     applicationConfig.setId("springboot-dubbo-consumer");
     applicationConfig.setName("springboot-dubbo-consumer");
     return applicationConfig;
    }
    @Bean
    public ProtocolConfig protocolConfig() {
        ProtocolConfig protocolConfig = new ProtocolConfig();
        protocolConfig.setPort(20880);
        protocolConfig.setName("dubbo");
        return protocolConfig;
    }
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://10.0.20.121:2181?backup=10.0.20.131:2181,10.0.20.132:2181,10.0.20.133:2181");
        registryConfig.setCheck(false);
        return registryConfig;
    }
    @Bean
    public MonitorConfig monitorConfig() {
        MonitorConfig monitorConfig = new MonitorConfig();
        monitorConfig.setProtocol("registry");
        return monitorConfig;
    }
    @Bean
    public ReferenceConfig<GenericService> referenceConfig(){
        ReferenceConfig<GenericService> referenceConfig = new ReferenceConfig<>();
        referenceConfig.setInterface("com.smart.springboot.api.HelloServiceFacade");
        referenceConfig.setApplication(applicationConfig());
        referenceConfig.setRegistry(registryConfig());
        referenceConfig.setMonitor(monitorConfig());
        referenceConfig.setVersion("1.0.0");
        referenceConfig.setTimeout(20000);
        referenceConfig.setId("helloService");
        referenceConfig.setGeneric(Boolean.TRUE);
        return referenceConfig;
    }
}

2.2 啟動(dòng)類

package com.smart.springboot;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.rpc.service.GenericService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import java.util.Arrays;
/**
 * @author : cuantianhou 2020/1/14
 */
@SpringBootApplication
public class SpringBootDubboConsumer {
    public static void main(String[] args) {
        ConfigurableApplicationContext configurableApplicationContext =   SpringApplication.run(SpringBootDubboConsumer.class,args);
        String[] beanNames = configurableApplicationContext.getBeanDefinitionNames();
        Arrays.asList(beanNames).forEach(System.out::println);
        ReferenceConfig<GenericService> referenceConfig = configurableApplicationContext.getBean(ReferenceConfig.class);
        GenericService genericService =  referenceConfig.get();
        genericService.$invoke("sayHello",null,null);
    }
}

2.3 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.smart.springboot</groupId>
    <artifactId>springboot-dubbo-consumer</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入dubbo環(huán)境-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

3、 運(yùn)行結(jié)果

4 、結(jié)論

從泛化調(diào)用實(shí)現(xiàn)的過程來看,我們可以對自己提供所有服務(wù)進(jìn)行測試,不需要引入調(diào)用的接口,減少代碼的侵入,如有問題,歡迎指正。

5、改進(jìn)

關(guān)于服務(wù)暴露的改進(jìn)

5.1 關(guān)于服務(wù)的實(shí)現(xiàn)

/**
 * @author : cuantianhou 2020/1/14
 */
public class HelloService implements HelloServiceFacade {
    @Override
    public void sayHello() {
        System.out.println("123");
    }
}

5.2 在服務(wù)端配置中增加代碼

  @Bean
    public ServiceConfig<HelloServiceFacade> serviceConfig(){
        ServiceConfig<HelloServiceFacade> serviceConfig = new ServiceConfig<>();
        serviceConfig.setInterface("com.smart.springboot.api.HelloServiceFacade");
        serviceConfig.setRef(helloService());
        serviceConfig.setApplication(applicationConfig());
        serviceConfig.setRegistry(registryConfig());
        serviceConfig.setMonitor(monitorConfig());
        serviceConfig.setVersion("1.0.0");
        serviceConfig.setTimeout(20000);
        serviceConfig.setId("helloService");
        serviceConfig.export();
        return serviceConfig;
    }
    @Bean
    public HelloService helloService(){
        return new HelloService();
    }

到此這篇關(guān)于基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SpringBoot 泛化調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java調(diào)用百度的接口獲取起-止位置的距離

    java調(diào)用百度的接口獲取起-止位置的距離

    本文主要介紹了java調(diào)用百度的接口獲取起-止位置的距離,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 淺談Java解釋器模式

    淺談Java解釋器模式

    這篇文章主要介紹了Java基于解釋器模式實(shí)現(xiàn)定義一種簡單的語言功能,簡單描述了解釋器模式的概念、功能及Java使用解釋器模式定義一種簡單語言的相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2021-10-10
  • Java如何跳過https的ssl證書驗(yàn)證詳解

    Java如何跳過https的ssl證書驗(yàn)證詳解

    這篇文章主要介紹了Java跳過https的ssl證書驗(yàn)證的解決思路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來深入學(xué)習(xí)下吧
    2019-06-06
  • 帶你快速搞定java IO

    帶你快速搞定java IO

    這篇文章主要介紹了Java IO流 文件傳輸基礎(chǔ)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下,希望能給你帶來幫助
    2021-07-07
  • java基于swing實(shí)現(xiàn)的五子棋游戲代碼

    java基于swing實(shí)現(xiàn)的五子棋游戲代碼

    這篇文章主要介紹了java基于swing實(shí)現(xiàn)的五子棋游戲代碼,主要涉及圖形界面與數(shù)組的用法,有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-11-11
  • 解決springboot 獲取form-data里的file文件的問題

    解決springboot 獲取form-data里的file文件的問題

    這篇文章主要介紹了解決springboot 獲取form-data里的file文件的問題的相關(guān)資料,這里提供了詳細(xì)的解決步驟,需要的朋友可以參考下
    2017-07-07
  • 使用idea和gradle編譯spring5源碼的方法步驟

    使用idea和gradle編譯spring5源碼的方法步驟

    這篇文章主要介紹了詳解使用idea和gradle編譯spring5源碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • SpringBoot中的Controller用法示例詳解

    SpringBoot中的Controller用法示例詳解

    Controller是SpringBoot里最基本的組件,他的作用是把用戶提交來的請求通過對URL的匹配,分配給不同的接收器,再進(jìn)行處理,然后向用戶返回結(jié)果,這篇文章主要介紹了SpringBoot中的Controller用法,需要的朋友可以參考下
    2023-06-06
  • java開發(fā)ShardingSphere的路由引擎類型示例詳解

    java開發(fā)ShardingSphere的路由引擎類型示例詳解

    這篇文章主要為大家介紹了java開發(fā)ShardingSphere的路由引擎類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決

    這篇文章主要為大家介紹了Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06

最新評論