基于SpringBoot的Dubbo泛化調(diào)用的實(shí)現(xiàn)代碼
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基于swing實(shí)現(xiàn)的五子棋游戲代碼
這篇文章主要介紹了java基于swing實(shí)現(xiàn)的五子棋游戲代碼,主要涉及圖形界面與數(shù)組的用法,有不錯(cuò)的參考借鑒價(jià)值,需要的朋友可以參考下2014-11-11解決springboot 獲取form-data里的file文件的問題
這篇文章主要介紹了解決springboot 獲取form-data里的file文件的問題的相關(guān)資料,這里提供了詳細(xì)的解決步驟,需要的朋友可以參考下2017-07-07java開發(fā)ShardingSphere的路由引擎類型示例詳解
這篇文章主要為大家介紹了java開發(fā)ShardingSphere的路由引擎類型示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決
這篇文章主要為大家介紹了Spring?Boot將@RestController誤用于視圖跳轉(zhuǎn)問題解決方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06