springboot整合dubbo(二)

springboot 整合dubbo两种配置方式

一、application.yml 方式
通过提供方和调用方 application.yml 配置

1、提供方 application.yml

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
server:
  port: 9207
#Mybatis 配置
mybatis:
  type-aliases-package: com.demo.model
  mapper-locations: classpath:com/demo/mapper/*Mapper.xml

#Dubbo 配置
dubbo:
  application:
    name: myProvider
  registry:
    protocol: zookeeper
    address: localhost:2181
  # 配置服务协议及端口
  protocol:
    name: dubbo
    port: 20880

2、调用方 application.yml 配置

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf-8&useSSL=true
    username: root
    password: 123456
server:
  port: 9208
#Mybatis 配置
mybatis:
  type-aliases-package: com.demo.model
  mapper-locations: classpath:com/demo/mapper/*Mapper.xml

#Dubbo 配置
dubbo:
  application:
    name: myConsumer
  registry:
    protocol: zookeeper
    address: localhost:2181
  # 配置服务协议及端口
  protocol:
    name: dubbo
    port: 20880

二、通过xml 配置

在提供方和调用方 resources 下增加 相关xml配置

1、提供方 resources 下增加 dubbo-provider.xml

<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="myProvider"/>

    <!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />

    <!--关闭服务消费方所有服务的启动检查。dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。-->
    <dubbo:consumer check="false" />

    <!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
    <dubbo:annotation package="com.demo.provider"/>

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
    <!-- 声明需要暴露的服务接口 -->
<!--    <dubbo:service interface="com.demo.dubbo.api.UserService" ref="userService" timeout="10000"  version="1.0.0"/>-->
    <!-- 和本地bean一样实现服务 -->
<!--    <bean id="userService" class="com.demo.provider.serviceImpl.UserServiceImpl" />-->
    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->

</beans>

2、提供方启动代码修改,注入 dubbo-provider.xml

@SpringBootApplication
@EnableTransactionManagement //开启事务
@EnableSwagger2
@MapperScan("com.demo.dao")
@EnableDubbo
@ImportResource(value = {"classpath:dubbo-provider.xml"}) //注入 dubbo-provider.xml
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}

3、调用方 resources 下增加 dubbo-consumer.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="myConsumer"/>

    <!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />

    <!-- 使用注解方式创建远程服务代理-->
    <dubbo:annotation package="com.demo.consumer"/>

    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
    <!-- 生成远程服务代理,可以和本地bean一样使用demoService, mock 降级处理 -->
<!--    <dubbo:reference id="userService" interface="com.demo.dubbo.api.UserService" timeout="10000" check="false" mock="return 服务器开小差了...."> </dubbo:reference>-->
    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
</beans>

4、调用方启动代码修改,注入 dubbo-consumer.xml

@SpringBootApplication
@EnableTransactionManagement //开启事务
@EnableSwagger2
@MapperScan("com.demo.dao")
@EnableDubbo
@ImportResource(value = {"classpath:dubbo-consumer.xml"})//注入xml
public class ConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

springboot 整合dubbo两种注解方式

api 接口代码

public interface UserService {

    String SayHello(String word);
}

一、采用@Service注解方式

1、提供方接口实现代码

@Component
//如果采用xml注解,这句不需要
@Service( version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
@Transactional(propagation = Propagation.REQUIRED, timeout=10) //不能catch,catch了事务不能回滚
public class UserServiceImpl implements UserService {

    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private UserAmtMapper userAmtMapper;

    @Override
    public String SayHello(String word) {
        return "Hello " + word;
    } 
}

2、调用方调用代码

@RestController
@RequestMapping("/dubbo")
@Api(value = "dubbo测试模块")
public class UserController {

    //注意版本号 可设置降级
    @Reference(version = "1.0.0")
    private UserService userService;

    @RequestMapping(value="/sayHello",method = RequestMethod.GET)
    @ApiImplicitParam(paramType = "query",name= "name" ,value = "用户名称",dataType = "String")
    @ApiOperation(value = "dubbo测试", notes="返回dubbo测试")
    public String sayHello(String name){
        String result=userService.SayHello(name);
        return result;
    }
}

二、采用xml注解方式

1、提供方接口实现时不需要加@Service,调用方代码不变

@Component
//如果采用xml注解,这句不需要
//@Service( version = "1.0.0",timeout = 10000,interfaceClass = UserService.class)
@Transactional(propagation = Propagation.REQUIRED, timeout=10) //不能catch,catch了事务不能回滚
public class UserServiceImpl implements UserService {

    @Autowired
    private UsersMapper usersMapper;

    @Autowired
    private UserAmtMapper userAmtMapper;

    @Override
    public String SayHello(String word) {
        return "Hello " + word;
    } 
}

2、提供方 dubbo-provider.xml 修改,增加服务配置 dubbo:service 和 bean

<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="myProvider"/>

    <!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />

    <!--关闭服务消费方所有服务的启动检查。dubbo缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成。-->
    <dubbo:consumer check="false" />

    <!-- 使用注解方式暴露接口,会自动扫描package下所有包中dubbo相关的注解,这样就不用在xml中再针对每个服务接口配置dubbo:service interface-->
    <dubbo:annotation package="com.demo.provider"/>

    <!-- 用dubbo协议在20880端口暴露服务 -->
    <dubbo:protocol name="dubbo" port="20880" />

    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
    <!-- 声明需要暴露的服务接口 -->
 <dubbo:service interface="com.demo.dubbo.api.UserService" ref="userService" timeout="10000"  version="1.0.0"/>
    <!-- 和本地bean一样实现服务 -->
   <bean id="userService" class="com.demo.provider.serviceImpl.UserServiceImpl" />-->
    <!-- ********* 如果采用@Service自动注解,这些配置不需要 

</beans>

3、调用方 dubbo-consumer.xml 修改,增加服务配置 dubbo:reference

<?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="myConsumer"/>

    <!-- 注册中心配置,使用zookeeper注册中心暴露服务地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" timeout="60000" />

    <!-- 使用注解方式创建远程服务代理-->
    <dubbo:annotation package="com.demo.consumer"/>

    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->
    <!-- 生成远程服务代理,可以和本地bean一样使用demoService, mock 降级处理 -->
<dubbo:reference id="userService" interface="com.demo.dubbo.api.UserService" timeout="10000" check="false" mock="return 服务器开小差了...."> </dubbo:reference>
    <!-- ********* 如果采用@Service自动注解,这些配置不需要 -->

</beans>

注:
1、提供和调用时,注意版本号必须一致(或者都不带版本号),否则无法调通

2、dubbo 中 数据mode 必须要 Serializable,可在Mybatis 配置文件 generatorConfig.xml 中增加以下配置,逆向工程时自动生成(context节点中)

<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

猜你喜欢

转载自blog.csdn.net/weixin_41003771/article/details/114393739