SpringBoot dubbo 的简单使用 xml 版本
使用gradle 创建父子工程
dubbo 其实就是一个rpc 的远程调用的框架(主要功能),具体已经实现好了 ,并且dubbo 中实现了一些监控的功能
alibb-cloud-study 父工程
//setting.gradle
rootProject.name = 'alibb-cloud-study'
include 'alibb-dubbo-mineserviceapi'
include 'alibb-dubbo-provider'
include 'alibb-dubbo-consumer'
//加载子模块的gradle配置
rootProject.children.each {project ->
project.buildFileName = "${project.name}.gradle"
}
//build.gradle
ext{
moduleProjects=subprojects.findAll{
it.name.startsWith("spring-")
}//找到所有子模块
}
configure(allprojects) { project ->
group = 'com.study'
version = '0.0.1-SNAPSHOT'
repositories {
mavenLocal()
maven {url 'http://maven.aliyun.com/nexus/content/groups/public/'}
mavenCentral()
maven { url "https://repo.spring.io/libs-release" }
maven { url "https://repo.spring.io/milestone" } // Reactor
}
}
subprojects {
apply plugin: 'java'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
configure(moduleProjects) { project ->
}
- alibb-dubbo-mineserviceapi 模块 —接口api
//alibb-dubbo-mineserviceapi.gradle
plugins {
}
dependencies {
}
jar {
baseName("dubbo-mineserviceapi")
version("0.0.1")
// manifest {
// attributes "Manifest-Version": 1.0,
// 'Main-Class': 'com.study.springcloudribbonstudy.SpringCloudRibbonStudyApplication'
// }
}
//test {
// useJUnitPlatform()
//}
//demo interface for the dubbo
public interface XmlDemoService {
String sayHello();
}
- alibb-dubbo-provider ----服务提供者 依赖alibb-dubbo-mineserviceapi 并实现
//alibb-dubbo-provider.gradle
plugins {
id 'org.springframework.boot' version '2.2.10.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}
dependencies {
//
// testImplementation('org.springframework.boot:spring-boot-starter-test') {
// exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
// }
implementation 'org.springframework.boot:spring-boot-starter'
implementation project(':alibb-dubbo-mineserviceapi')//依赖同一个父模块的子模块
implementation group: 'org.apache.dubbo', name: 'dubbo', version: '2.7.6'
}
jar {
baseName("dubbo-provider-xml")
version("0.0.1")
manifest {
attributes "Manifest-Version": 1.0,
'Main-Class': 'com.study.alibbdubboprovider.AlibbDubboProviderApplication'
}
}
//test {
// useJUnitPlatform()
//}
import com.study.alibbdubbomineserviceapi.demo.XmlDemoService;
import org.springframework.stereotype.Service;
@Service
public class XmlDemoServiceProvide implements XmlDemoService {
@Override
public String sayHello() {
return "XmlDemo Hello";
}
}
@SpringBootApplication
@ImportResource(value = {"classpath:dubbo.xml"})//引入配置文件
public class AlibbDubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(AlibbDubboProviderApplication.class, args);
try {
System.in.read();
} catch (IOException e) {
e.printStackTrace();
}
}
}
dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="alibb-dubbo-provider"></dubbo:application>
<!-- 提供方应用信息,用于计算依赖关系 使用内置的 -->
<dubbo:registry address="N/A"></dubbo:registry>
<!-- 配置协议 使用dubbo 并暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" host="127.0.0.1"></dubbo:protocol>
<!-- 将该接口暴露到dubbo中-->
<dubbo:service interface="com.study.alibbdubbomineserviceapi.demo.XmlDemoService" ref="xmlDemoServiceProvide" />
</beans>
- alibb-dubbo-consumer -消费者 依赖alibb-dubbo-mineserviceapi 直接使用
plugins {
id 'org.springframework.boot' version '2.2.10.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
implementation project(':alibb-dubbo-mineserviceapi')//依赖同一个父模块的子模块
implementation group: 'org.apache.dubbo', name: 'dubbo', version: '2.7.6'
}
jar {
baseName("dubbo-comsumer-xml")
version("0.0.1")
manifest {
attributes "Manifest-Version": 1.0,
'Main-Class': 'com.study.alibbdubboconsumer.AlibbDubboConsumerApplication'
}
}
//test {
// useJUnitPlatform()
//}
@RestController
@RequestMapping("/xmldemo")
public class XmlDemoApi {
@Autowired(required = false)
private XmlDemoService xmlDemoService;
@RequestMapping("/hello")
public String hello(){
return xmlDemoService.sayHello();
}
}
@SpringBootApplication
@ImportResource(value = {"classpath:dubbo.xml"})//引入配置文件
public class AlibbDubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(AlibbDubboConsumerApplication.class, args);
}
}
配置
dubbo.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="alibb-dubbo-consumer"></dubbo:application>
<!-- 提供方应用信息,用于计算依赖关系 没有注册中心-->
<dubbo:registry address="N/A"></dubbo:registry>
<!-- 这里使用的注册中心是zookeeper -->
<!-- <dubbo:registry address="dubbo://192.168.0.236:20880" client="dubbo"/>-->
<!-- 从注册中心中查找服务 ,没有注册中心的配置一定要写url-->
<dubbo:reference id="xmlDemoService" interface="com.study.alibbdubbomineserviceapi.demo.XmlDemoService" url="dubbo://127.0.0.1:20880"/>
</beans>
#application.properties
server.port=8081
完了。