spring boot 整合dubbo

1.使用zookeeper作为注册中心,所以需要在服务器上安装zookeeper,将Dubbo Admin 先运行在服务器上,以便查看服务状态

2.导入sql:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `sex` varchar(25) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_bin ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, '王尔瓦', '女', 20);
INSERT INTO `user` VALUES (2, '李四', '男', 21);
INSERT INTO `user` VALUES (3, '王五', '女', 26);

SET FOREIGN_KEY_CHECKS = 1;

3.创建接口类和实体类的工程commons,创建消费者工程consumer,创建生产者工程provider

4.commos工程中创建

实体类:(由于远程服务调用需要网络传输,所以实体类需要实现序列化)

//使用lombok注解简化代码,记得引入依赖,安装Lombok插件
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
    private Integer id;
    private String name;
    private String sex;
    private Integer age;
}

 接口类:

public interface UserService {
    /**
     * 添加用户
     * @param user
     * @return
     */
    boolean addUser(User user);

    /**
     * 根据id删除用户
     * @param id
     * @return
     */

    boolean deleteUserById(int id);

    /**
     * 根据id删除用户
     * @param user
     * @return
     */
    boolean updateUserById(User user);

    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    User getUserById(int id);

    /**
     * 获取所有用户
     * @return
     */
    List<User> getAllUser();

}

5.将commons工程安装到本地仓库,在provider工程中引入

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot_dubbo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_provider</artifactId>
<dependencies>
    <!--共用模块-->
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>dubbo_commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!--mybatis-plus-->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.1</version>
    </dependency>
    <!--mysql-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>8.0.26</scope>
    </dependency>
    <!-- dubbo的依赖 -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-spring-boot-starter</artifactId>
        <version>2.7.6</version>
    </dependency>
    <!-- zk的依赖 -->
    <dependency>
        <groupId>org.apache.dubbo</groupId>
        <artifactId>dubbo-dependencies-zookeeper</artifactId>
        <version>2.7.6</version>
        <type>pom</type>
        <exclusions>
            <exclusion>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-log4j12</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

</project>

provider工程中创建服务实现类实现UserService接口(注意service注解是dubbo包中的)

@Service//不是spring中的service而是dubbo中的
public class UserServiceImpl implements UserService {

    @Autowired
    private UserMapper userMapper;

    @Override
    public boolean addUser(User user) {
        return userMapper.addUser(user);
    }

    @Override
    public boolean deleteUserById(int id) {
        return userMapper.deleteUserById(id);
    }

    @Override
    public boolean updateUserById(User user) {
        return userMapper.updateUserById(user);
    }

    @Override
    public User getUserById(int id) {
        return userMapper.getUserById(id);
    }

    @Override
    public List<User> getAllUser() {
        return userMapper.getAllUser();
    }
}

provider工程中创建mapper接口

public interface UserMapper {

    boolean addUser(User user);

    boolean deleteUserById(int id);

    boolean updateUserById(User user);

    User getUserById(int id);

    List<User> getAllUser();
}

provider工程中创建mapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.it.mapper.UserMapper">
    <select id="getUserById" resultType="com.it.entity.User">
       SELECT * from user WHERE id=#{id}
    </select>
    <insert id="addUser" parameterType="com.it.entity.User">
        insert into user values (null ,#{name},#{sex},#{age})
    </insert>
    <delete id="deleteUserById" parameterType="com.it.entity.User">
        delete from user where id=#{id}
    </delete>
    <update id="updateUserById" parameterType="com.it.entity.User">
        update user set name=#{name},sex=#{sex},age=#{age} where id=#{id}
    </update>
    <select id="getAllUser" resultType="com.it.entity.User">
        select * from user
    </select>
</mapper>

provider配置文件:

server:
  port: 8080
spring:
  application:
    name: mc_provider
  #访问数据库
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql:///dubbo_demo?serverTimezone=UTC&useSSL=true&characterEncoding=utf-8
    username: root
    password: 123456
  #mybatis-plus
mybatis-plus:
  mapper-locations: classpath:mapper/*.xml
  type-aliases-package: com.it.entity
  #dubbo,zookeeper
dubbo:
  application:
    name: dubbo_provider
  #zookeeper地址
  registry:
    address: zookeeper://192.14.80.206:2181
    timeout: 10000
  #暴露端口
  protocol:
    name: dubbo
    port: 20880

启动类:(注意加上开启dubbo注解)

@SpringBootApplication
@EnableDubbo//开启dubbo
@MapperScan("com.it.mapper")//扫描mapper接口
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class,args);
    }
}

6.将commons映入consumer工程

pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>springboot_dubbo</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>dubbo_customer</artifactId>
<dependencies>
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>dubbo_commons</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

</project>

在controller中调用服务(注意使用Dubbo中的@Reference才能调用服务,而不是jdk中的@Reference)

@RestController
@RequestMapping("/user")
public class UserController {
    @Reference
    private UserService userService;

    /**
     * 获取所有用户
     * @param
     * @return
     */
    @RequestMapping("/getAllUser")
    public List<User> getAllUser(){
       return  userService.getAllUser();
    }

    /**
     * 添加用户
     * @param user
     * @return
     */
    @RequestMapping("/addUser")
    public boolean addUser(@RequestBody User user){
        return  userService.addUser(user);
    }

    /**
     * 根据id删除用户
     * @param id
     * @return
     */
    @RequestMapping("/deleteUserById")
    public boolean deleteUserById(int id){
        return  userService.deleteUserById(id);
    }

    /**
     * 根据id更新用户
     * @param user
     * @return
     */
    @RequestMapping("/updateUserById")
    public boolean updateUserById(@RequestBody User user){
        return  userService.updateUserById(user);
    }

    /**
     * 根据id获取用户
     * @param id
     * @return
     */
    @RequestMapping("/getUserById")
    public User getUserById(int id){
        return  userService.getUserById(id);
    }
}

配置文件:

server:
  port: 8081
dubbo:
  application:
    name: dubbo_customer
  registry:
    address: zookeeper://192.14.80.206:2181
    timeout: 10000

启动类:(注意加上开启dubbo注解)

@SpringBootApplication
@EnableDubbo//开启dubbo
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class,args);
    }
}

7.先启动生产者工程,再启动消费者工程

消费者能够调用到服务

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>