该种方式和上一篇: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查看