該種方式和上一篇:https://blog.csdn.net/u014429653/article/details/99703451創建過程基本一樣,不同處是配置文件
參考官方文檔API配置和註解配置將xml裏面的東西編寫爲API代碼再使用註解註冊到容器中。
API配置: http://dubbo.apache.org/zh-cn/docs/user/configuration/api.html
xml配置: http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html
1、創建工程
創建一個空的maven父工程:,在父工程下創建一個maven子工程,然後創建兩個springboot工程;
父工程:dubbospringbootdemo2
maven子工程:dubbospringbootapi(公共api接口)
springboot工程:dubbospringbootprovider(服務提供方)
springboot工程:dubbospringbootconsumer(服務消費方)
2、配置過程
2.1 在dubbospringbootapi工程中加入接口
2.2 配置dubbospringbootprovider
在pom.xml中引入jar包
創建接口實現類(service註解暴露服務):
**注意:**此處必須要用@Component註解
創建dubbo配置類(提供方全局配置):
package com.dubboo.test.dubbospringbootprovider.configuration;
import com.alibaba.dubbo.config.*;
import com.dubbo.test.service.DemoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MyDubboConfig {
//<dubbo:application name="boot-user-service-provider"></dubbo:application>
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("user-service-provider-2");
return applicationConfig;
}
//<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
}
//<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20882);
return protocolConfig;
}
/**
*<dubbo:service interface="com.zang.gmall.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
*/
@Bean
public ServiceConfig<DemoService> userServiceConfig(DemoService demoService) {
ServiceConfig<DemoService> serviceConfig = new ServiceConfig<>();
serviceConfig.setInterface(DemoService.class);
serviceConfig.setRef(demoService);
serviceConfig.setVersion("1.0.0");
//配置每一個method的信息
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("sayHello");
methodConfig.setTimeout(1000);
//將method的設置關聯到service配置中
List<MethodConfig> methods = new ArrayList<>();
methods.add(methodConfig);
serviceConfig.setMethods(methods);
return serviceConfig;
}
// <dubbo:provider timeout="1000"></dubbo:provider>
@Bean
public ProviderConfig providerConfig() {
ProviderConfig providerConfig = new ProviderConfig();
providerConfig.setTimeout(5000);
return providerConfig;
}
// <dubbo:monitor address="127.0.0.1:7010"></dubbo:monitor>
@Bean
public MonitorConfig monitorConfig() {
MonitorConfig monitorConfig = new MonitorConfig();
//monitorConfig.setAddress("127.0.0.1:7010");
monitorConfig.setProtocol("registry");
return monitorConfig;
}
}
Spring Boot啓動類添加服務掃描:
@DubboComponentScan(basePackages = “com.dubboo.test.dubbospringbootprovider”)
2.3 配置dubbospringbootconsumer
在pom.xml中引入jar包(同2.2provider引入相同)
創建接口和實現類,在實現類中使用@Reference引入遠程服務
創建controller
創建dubbo配置類(提供方全局配置):
package com.dubbo.test.dubbospringbootconsumer.configuration;
import com.alibaba.dubbo.config.*;
import com.dubbo.test.service.DemoService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.ArrayList;
import java.util.List;
@Configuration
public class MyDubboConfig {
//<dubbo:application name="boot-user-service-provider"></dubbo:application>
@Bean
public ApplicationConfig applicationConfig() {
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("user-service-sonsumer-2");
return applicationConfig;
}
//<dubbo:registry protocol="zookeeper" address="127.0.0.1:2181"></dubbo:registry>
@Bean
public RegistryConfig registryConfig() {
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("127.0.0.1:2181");
return registryConfig;
}
//<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
@Bean
public ProtocolConfig protocolConfig() {
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20883);
return protocolConfig;
}
/**
*<dubbo:service interface="com.zang.gmall.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
*/
@Bean
public ReferenceConfig<DemoService> userReferenceConfig() {
ReferenceConfig<DemoService> serviceConfig = new ReferenceConfig<>();
serviceConfig.setInterface(DemoService.class);
serviceConfig.setTimeout(5000);
serviceConfig.setVersion("*");
serviceConfig.setRetries(3);
//配置每一個method的信息
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("sayHello");
methodConfig.setTimeout(1000);
//將method的設置關聯到service配置中
List<MethodConfig> methods = new ArrayList<>();
methods.add(methodConfig);
serviceConfig.setMethods(methods);
return serviceConfig;
}
// <dubbo:consumer check="false" timeout="5000"></dubbo:consumer>
@Bean
public ConsumerConfig consumerConfig() {
ConsumerConfig consumerConfig = new ConsumerConfig();
consumerConfig.setTimeout(3000);
return consumerConfig;
}
// <dubbo:monitor address="127.0.0.1:7010"></dubbo:monitor>
@Bean
public MonitorConfig monitorConfig() {
MonitorConfig monitorConfig = new MonitorConfig();
//monitorConfig.setAddress("127.0.0.1:7010");
monitorConfig.setProtocol("registry");
return monitorConfig;
}
}
此處注意的是:爲避免和dubbospringbootprovider工程使用相同的端口,這裏在application.properties中自由配置端口;
同理:在dubbospringbootprovider也可以在application.properties中自由設置端口;
3、運行過程
啓動服務方和消費方;
同時去管理平臺dubbo-admin和監控平臺dubbo-monitor查看