最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1、服務(wù)端定義

1.1 服務(wù)定義及實現(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 啟動類

package com.smart.springboot;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 啟動類
 *
 * @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、消費端定義

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 啟動類

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、 運行結(jié)果

4 、結(jié)論

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

5、改進

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

5.1 關(guān)于服務(wù)的實現(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)用的實現(xiàn)代碼的文章就介紹到這了,更多相關(guān)SpringBoot 泛化調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot項目打包鏡像方式以及區(qū)分環(huán)境打包的方法

    springboot項目打包鏡像方式以及區(qū)分環(huán)境打包的方法

    本文主要介紹了springboot項目打包鏡像方式以及區(qū)分環(huán)境打包的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • Mybatis配置之properties和settings標簽的用法

    Mybatis配置之properties和settings標簽的用法

    這篇文章主要介紹了Mybatis配置之properties和settings標簽的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • 詳解Java設(shè)計模式編程中的里氏替換原則

    詳解Java設(shè)計模式編程中的里氏替換原則

    這篇文章主要介紹了Java設(shè)計模式編程中的里氏替換原則,有這個名字是因為這是由麻省理工學院的一位姓里的女士Barbara Liskov提出來的(嗯...),需要的朋友可以參考下
    2016-02-02
  • maven 隱式依賴引起的包沖突解決辦法

    maven 隱式依賴引起的包沖突解決辦法

    這篇文章主要介紹了maven 隱式依賴引起的包沖突解決辦法的相關(guān)資料,需要的朋友可以參考下
    2016-12-12
  • 一文讀懂Java多線程背后的故事

    一文讀懂Java多線程背后的故事

    Java是一種廣泛使用的編程語言,而多線程是Java程序員必不可少的一部分,Java的多線程支持具有確保數(shù)據(jù)同步、最大化利用CPU資源、并行處理任務(wù)等眾多優(yōu)點,本文從實際應(yīng)用場景出發(fā),為您詳細介紹 Java 多線程的各個方面的實際應(yīng)用及背景
    2023-06-06
  • JDBC自定義連接池過程詳解

    JDBC自定義連接池過程詳解

    這篇文章主要介紹了JDBC自定義連接池過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • maven打包zip包含bin下啟動腳本的完整代碼

    maven打包zip包含bin下啟動腳本的完整代碼

    這篇文章主要介紹了maven打包zip包含bin下啟動腳本,本文給大家講解的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • 探討Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔

    探討Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔

    這篇文章主要介紹了Java 將Markdown文件轉(zhuǎn)換為Word和PDF文檔,本文通過分步指南及代碼示例展示了如何將 Markdown 文件轉(zhuǎn)換為 Word 文檔和 PDF 文件,需要的朋友可以參考下
    2024-07-07
  • 常用的Spring Boot調(diào)用外部接口方式實現(xiàn)數(shù)據(jù)交互

    常用的Spring Boot調(diào)用外部接口方式實現(xiàn)數(shù)據(jù)交互

    Spring Boot提供了多種調(diào)用外部接口的方式,可以方便地實現(xiàn)與其他系統(tǒng)的數(shù)據(jù)交互,提高系統(tǒng)的可擴展性和數(shù)據(jù)共享能力,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-04-04
  • Java 和 JavaScript 真正通用的Base64編碼詳解

    Java 和 JavaScript 真正通用的Base64編碼詳解

    這篇文章主要介紹了Java 和 JavaScript 真正通用的Base64編碼詳解的相關(guān)資料,附有Java和Javascript 的Base64編碼,需要的朋友可以參考下
    2016-11-11

最新評論

大港区| 宜川县| 佳木斯市| 安陆市| 桓台县| 衡东县| 宜州市| 白城市| 深泽县| 年辖:市辖区| 绍兴市| 永顺县| 宜城市| 安国市| 钦州市| 阿拉善右旗| 克什克腾旗| 铜鼓县| 铁力市| 息烽县| 读书| 浙江省| 得荣县| 闵行区| 信宜市| 榆中县| 中江县| 塔城市| 芦溪县| 凯里市| 湛江市| 仙桃市| 尉氏县| 安图县| 宁安市| 新平| 南皮县| 克拉玛依市| 泰和县| 任丘市| 甘谷县|