使用Dubbo分布式框架,结合SpringBoot框架+Zookeeper,实现生产者消费者的maven父子级结构项目。

1.首先创建maven项目,删除src文件夹

2.pom.xml文件中加入标签,声明打包类型,管理项目依赖关系,不作为项目使用

<packaging>pom</packaging>

3.创建dubbo生产者,选择Spring Init...

选择你要的服务,我选择自己的MySql数据库

4.shop_my项目pom.xml文件引入依赖关系,父项目和子项目产生关系

    <modules>
        <module>dubbo_provider</module>
    </modules>

5.provider项目pom.xml引入核心jar包

        <!--zookeeper 包-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!--dubbo 和 springboot 整合包-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>

6.provider创建包结构,生产者不需要controller层,实体Bean需要序列化,并且@Service注意导阿里巴巴的包

7.service层写一个根据id查询信息的方法连接数据库创建mapper.xml写入Sql查询


    /**
     * 根据Id查询图书信息
     * @param id
     * @return
     */
    BookBean queryBookById(Integer id);

serviceImpl层

package com.jk.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.jk.mapper.BookMapper;
import com.jk.model.BookBean;
import org.springframework.beans.factory.annotation.Autowired;


@Service(interfaceClass = BookService.class)  //导alibaba的包,对外开放dubbo接口
@Component //替代原有service注解 注入Service bean 防止与dubbo的@Service注解冲突
public class BookServiceImpl implements BookService{
    @Autowired
    private BookMapper bookMapper;

    @Override
    public BookBean queryBookById(Integer id) {
        return bookMapper.queryBookById(id);
    }
}

mapper层

    BookBean queryBookById(Integer id);

xml sql:

     <!--根据id查询图书信息-->
    <select id="queryBookById" parameterType="int" resultType="com.jk.model.BookBean">
        select id,name,anthor,context from a_book where id = #{value}
    </select>

8.application.properties配置需要配置

 #配置dubbo服务提供者
  #服务名称 服务名称不能重复 用来标明不同的业务模块
  spring.dubbo.application.name=bookprovider
  #是否为服务提供端
  spring.dubbo.server=true
  #注册中心地址  zookeeper默认端口号
  spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
  #dubbo 协议 dubbo的使用协议 默认 dubbo协议
  spring.dubbo.protocol.name=dubbo
  #dubbo接口端口号 默认20880 同一台电脑端口号不能重复
  spring.dubbo.protocol.port=20880
  # server.servlet.application-display-name=
  spring.datasource.driverClassName=com.mysql.jdbc.Driver
  spring.datasource.url=jdbc:mysql://localhost:3306/math?serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8
  spring.datasource.username=root
  spring.datasource.password=root
  #设置页面编码为UTF-8
  spring.thymeleaf.encoding=UTF-8
  #设置转换格式为HTML格式
  spring.thymeleaf.servlet.content-type=text/html
  mybatis.mapper-locations=classpath:mapper/*.xml

9.DubboProviderApplication配置类需要启动dubbo注解

@SpringBootApplication
@EnableDubboConfiguration//启用dubbo注解
@MapperScan("com.jk.mapper")  //扫描mapper层
public class DubboProviderApplication {

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

}

10.启动zookeeper

11.启动项目,启动成功如下图

方法名已经打印出来了

12.在shop_my下新建消费者项目,dubbo_consumer

13.同样pom.xml文件引入核心jar包

<!--zookeeper 包-->
        <dependency>
            <groupId>com.101tec</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.10</version>
        </dependency>
        <!--dubbo 和 springboot 整合包-->
        <dependency>
            <groupId>com.alibaba.spring.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.0.0</version>
        </dependency>
    </dependencies>

14.shop_my项目下pom.xml文件下加入依赖

    <modules>
        <module>dubbo_provider</module>
        <module>dubbo_consumer</module>
    </modules>

15.在consumer项目下的application配置类配置

server.port=8082
#配置dubbo服务提供者
#服务名称 服务名称不能重复 用来标明不同的业务模块
spring.dubbo.application.name=bookconsumer
#注册中心地址  zookeeper默认端口号
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#消费者启动检测生产者是否已启动,当值为true时才会检测,默认为true
spring.dubbo.consumer.check=false
#roundrobin轮询机制
#random #随机机制
#leastactive #最少活跃调用数机制  dubbo负载均衡策略
spring.dubbo.reference.loadbalance=roundrobin

16.创建包结构

17.与生产者不同的是,多一个controller层来调用接口

controller层,注意注入注解!阿里巴巴包

package com.jk.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.jk.model.BookBean;
import com.jk.service.BookService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("book")
public class BookController {
    @Reference
    private BookService bookService;


    @RequestMapping("queryBookById")
    @ResponseBody
    public BookBean queryBookById(Integer id){
        return bookService.queryBookById(id);
    }

}

17.实体bean和生产者的实体bean一致,注意都需要序列化!

18.创建service接口与生产者一致,注意!没有实现类

19.同样的在消费者项目的DubboConsumerApplication配置类同样加入@EnableDubboConfiguration//启用dubbo注解

@SpringBootApplication
@EnableDubboConfiguration//启用dubbo注解
public class DubboConsumerApplication {

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

}

完成接口调用!

20.启动消费者项目,浏览器访问方法

访问成功!

我的Mysql数据库

Dubbo分布式框架,结合SpringBoot框架,实现生产者消费者的maven父子级结构项目搭建完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值