接下来,介绍一下Dubbo与SpringBoot的三种zhen整合方式,详细的介绍,我都写在代码里面了。
一、服务提供方
- 首先先看SpringBoot的Application启动应用,代码如下:
package com.nyist.produce;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
import com.alibaba.dubbo.config.spring.context.annotation.DubboComponentScan;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
/**
*
* @author lhg
*
*/
/**
* Spring Boot与Dubbo整合的三种方式:
* 1.导入dubbo-starter,在application.properties配置属性,使用@Service【暴露服务】 使用@Reference 来引用服务
* 2.保留dubbo xml配置文件,使用@ImportResource() 导入dubbo-starter,使用@ImportResource导入dubbo的配置文件即可。
* 3.使用注解API的方式
* 将每一个组件手动创建到容器当中,让Dubbo扫面其他的组件
* @author lvhaoguang
*
*/
//开启基于注解的Dubbo
//@EnableDubbo 第一种方式下 使用
//@ImportResource(locations="classpath:provider.xml") 第二种方式使用
@EnableDubbo(scanBasePackages="com.nyist.produce")
@SpringBootApplication
public class BootUserServiceProviderApplication {
public static void main(String[] args) {
SpringApplication.run(BootUserServiceProviderApplication.class, args);
}
}
2.第一种方式下dubbo的配置方式:
dubbo:
application:
name: boot-user-service-provider #服务的应用名
registry:
protocol: zookeeper #协议名称
address: 127.0.0.1:2181 #地址
protocol:
name: dubbo #通信协议名称
port: 20880 #通信协议端口
monitor:
protocol: registry #监控中心
scan:
base-packages: 包扫描 在配置文件开启包扫面 就不需要使用@EnableDubbo注解了
3.第二种方式下,保留Dubbo.xml配置,使用@ImportResource()导入配置文件,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://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://dubbo.apache.org/schema/dubbo
http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
1.指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名)
<dubbo:application name="boot-user-service-provider"></dubbo:application>
2.指定注册服务中心的位置
<dubbo:registry address="zookeeper://localhost:2181"></dubbo:registry>
<dubbo:registry protocol="zookeeper" address="localhost:2181"></dubbo:registry>
3.指定通信规则(通信协议,通信规则)
<dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
4.暴露服务 ref:指定服务的真正实现对象
<dubbo:service interface="com.nyist.api.service.UserService" ref="userServiceImpl" version="1.0.0"></dubbo:service>
服务的实现
<bean id="userServiceImpl" class="com.nyist.produce.serviceImpl.UserServiceImpl"></bean>
统一设置服务配置方的级别
<dubbo:provider timeout="2000"></dubbo:provider>
连接监控中心
<dubbo:monitor address="registry"></dubbo:monitor>
</beans>
4.第三种配置,使用API的方式配置,代码如下:
package com.nyist.produce.config;
import java.util.Arrays;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MethodConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.ServiceConfig;
import com.nyist.api.service.UserService;
@Configuration
public class DubboConfig {
@Bean
public ApplicationConfig applicationConfig(){
ApplicationConfig applicationConfig = new ApplicationConfig();
applicationConfig.setName("boot-orderservice-providers");
return applicationConfig;
}
/**
* <dubbo:registry protocol="zookeeper" address="localhost:2181"></dubbo:registry>
*/
@Bean
public RegistryConfig registryConfig(){
RegistryConfig registryConfig = new RegistryConfig();
registryConfig.setProtocol("zookeeper");
registryConfig.setAddress("localhost:2181");
return registryConfig;
}
/**
* <dubbo:protocol name="dubbo" port="20880"></dubbo:protocol>
*/
@Bean
public ProtocolConfig protocolConfig(){
ProtocolConfig protocolConfig = new ProtocolConfig();
protocolConfig.setName("dubbo");
protocolConfig.setPort(20880);
return protocolConfig;
}
/**
* <!-- 4.暴露服务 ref:指定服务的真正实现对象-->
<dubbo:service interface="com.nyist.api.service.UserService" ref="userServiceImpl" version="1.0.0"></dubbo:service>
<!-- 服务的实现 -->
<bean id="userServiceImpl" class="com.nyist.produce.serviceImpl.UserServiceImpl"></bean>
*/
@Bean
public ServiceConfig<UserService> userviceConfig(UserService userService){
ServiceConfig<UserService> userviceConfig = new ServiceConfig<UserService>();
userviceConfig.setInterface(UserService.class);
userviceConfig.setRef(userService);
userviceConfig.setTimeout(1000);
userviceConfig.setVersion("1.0.0");
MethodConfig methodConfig = new MethodConfig();
methodConfig.setName("getUserAddressList");
methodConfig.setTimeout(2000);
userviceConfig.setMethods(Arrays.asList(methodConfig));
return userviceConfig;
}
/**
* <!-- 统一设置服务配置方的级别 -->
<dubbo:provider timeout="2000"></dubbo:provider>
<!-- 连接监控中心 -->
<dubbo:monitor address="registry"></dubbo:monitor>
*/
}
5.生产者工程结构目录如下:
二、服务消费者
1.同样的服务消费者也是这样,有三配置方式,一下基于第一种配置,配置服务消费者,如下:
dubbo:
application:
name: boot-order-service-consumer #应用的名字
registry:
address: zookeeper://127.0.0.1:2181
monitor:
protocol: registry
server:
port: 8081
2.消费者结构目录如下:
三、运行结果
结果如下:
源码下载:下载
其中API模块忘记忘记放里面了,API模块在这个里边可以找到:API模块