SpringBoot-06-Dubbo

  • 接口工程:存放实体bean和业务接口
  • 服务提供者:业务接口的实现类并将服务暴露且注册到注册中心,调用数据持久层
    • 添加依赖:dubbo,注册中心,接口工程
    • 配置服务提供者核心配置文件
  • 服务消费者:处理浏览器客户端发送的请求,从注册中心调用服务提供者所提供的服务
    • 添加依赖:dubbo,注册中心,接口工程
    • 配置服务消费者核心配置文件

同样还是需要三个工程

interface不需要是springboot项目,简单maven项目就可以,只是为了写接口,provider和consumer需要被加载到容器中,所以还是Springbootweb项目。provider和consumer的依赖一样:

<!--        dubbo集成SpringBoot框架起步依赖-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
<!--        注册中心-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.11</version>
        </dependency>
<!--        接口工程-->
        <dependency>
            <groupId>cn.youkee</groupId>
            <artifactId>06-springboot-dubbo-interface</artifactId>
            <version>1.0.0</version>
        </dependency>

具体的写法和之前差不多,还是provider实现接口工程中的方法,然后consumer调用provider提供的方法实现。只是现在不需要那么多配置文件了,只用在核心文件中简单配置一下:

provider的核心配置文件

server.port=8081
server.servlet.context-path=/

# 设置dubbo的配置
spring.application.name=07-dubbo-provider
# 当前工程是一个服务提供者
spring.dubbo.server=true
# 注册中心
spring.dubbo.registry=zookeeper://192.168.3.28:2181

consumer的核心配置文件

server.port=8080
server.servlet.context-path=/

# 设置dubbo配置
spring.application.name=08-dubbo-consumer
# 指定注册中心
spring.dubbo.registry=zookeeper://192.168.3.28:2181

这里zookeeper配在了本地的虚拟机上,也可以配云服务器上,最近腾讯云抽风就没有搞。zookeeper在linux上的配置也不麻烦,先装jdk1.8,然后下载zookeeper的压缩包解压,按之前的配置文件写法改一下。再进入bin文件夹下zkServer.sh start就可以了。

可以明显看到配置文件里少了之前暴露服务和引用服务的配置,因为集成SpringBoot后也可以用注解的方式完成这两个配置:

provider中StudentServiceImpl,实现了接口工程中的StudentService

@Component // 被Spring扫描到容器中
@Service(interfaceClass = StudentService.class, version = "1.0.0", timeout = 15000)
// 注意用dubbo的service注解,表明这是一个dubbo服务
public class StudentServiceImpl implements StudentService {
    @Override
    public Integer queryStudentCount() {
        return 6666;
    }
}

consumer中StudentController,引用StudentService服务

@Controller("studentController")
public class StudentController {
    // 注意用dubbo的注解,表明这是一个消费者,要引用一个服务
    // check表明在消费者开启的时候是否检查有这个服务,false表示调用的时候再检查
    @Reference(interfaceClass = StudentService.class, version = "1.0.0", check = false)
    private StudentService studentService;

    @RequestMapping("/student")
    public @ResponseBody String studentCount() {
        return "学生总人数:" + studentService.queryStudentCount();
    }
}

这里一定要注意,@Service和@Reference要导入com.alibaba包下的,这样才能完成Dubbo的暴露服务和引用服务。

至此Application类还不知道加入的Dubbo配置,所以**分别在provider和consumer的Application类上添加@EnableDubboConfiguration,表明开启Dubbo的配置**,因为@SpringBootApplication只能开启Spring的配置,Dubbo的它是扫不到的。

然后分别运行provider和consumer,通过student请求,查看效果,别忘了开zookeeper,不然会报错。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
由于缺乏具体的需求描述和数据结构定义,以下代码仅供参考。 ``` <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <mapper namespace="com.example.mapper.AddressMapper"> <!-- 查询用户的所有收货地址 --> <select id="findUserAddresses" resultType="com.example.entity.Address"> SELECT * FROM address WHERE user_id=#{userId} </select> <!-- 新增收货地址 --> <insert id="addAddress" parameterType="com.example.entity.Address"> INSERT INTO address(user_id, name, phone, province, city, district, detail) VALUES(#{userId}, #{name}, #{phone}, #{province}, #{city}, #{district}, #{detail}) </insert> <!-- 更新收货地址 --> <update id="updateAddress" parameterType="com.example.entity.Address"> UPDATE address SET name=#{name}, phone=#{phone}, province=#{province}, city=#{city}, district=#{district}, detail=#{detail} WHERE id=#{id} AND user_id=#{userId} </update> <!-- 删除收货地址 --> <delete id="deleteAddress" parameterType="int"> DELETE FROM address WHERE id=#{id} AND user_id=#{userId} </delete> </mapper> ``` 其中,`com.example.entity.Address` 是收货地址的实体类,包含属性:`id`、`userId`、`name`、`phone`、`province`、`city`、`district`和`detail`。`userId`是关联用户表的外键。 该XML中定义了四个SQL语句,分别为: - `findUserAddresses`:查询指定用户的所有收货地址。 - `addAddress`:新增收货地址。 - `updateAddress`:更新收货地址。 - `deleteAddress`:删除收货地址。 每个SQL语句的参数类型和返回结果类型都在XML中定义。使用时,需要将该XML文件与对应的Java接口一起使用,由Dubbo框架自动管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值