1.dubbo入门案例

1.Dubbo的基本架构


节点角色说明:

节点 角色说明
Provider 暴露服务的服务提供方。
Consumer 调用远程服务的服务消费方。
Registry 服务注册与发现的注册中心。
Monitor 统计服务的调用次数和调用时间的监控中心。
调用关系说明:
  1. 服务容器负责启动,加载,运行服务提供者。
  2. 服务提供者在启动时,向注册中心注册自己提供的服务。
  3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
  4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
  5. 服务消费者,从提供者地址列表中,基于负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
  6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。

2.入门案例,需求:使用Dubbo构建分布式架构,完成根据用户id查询用户

2.1编写dubbo服务提供者

(1)创建user-provider模块,导入依赖

  <dependency>
            <groupId>cn.itcast</groupId>
            <artifactId>user-api</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
        </dependency>

        <!--dubbo的起步依赖-->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>

        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-registry-nacos</artifactId>
            <version>2.7.8</version>
        </dependency>

(2)编写引导类

@SpringBootApplication
@MapperScan("com.zhang.mapper")
public class UserProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserProviderApplication.class, args);
    }
}

(3)domain

@Data
public class User implements Serializable {
    private Long id;
    private String username;
    private String address;
}

(4)mapper

public interface UserMapper {

    //根据id查询用户
    @Select("select * from tb_user where id = #{id}")
    User selectById(@Param("id") Long id);
}

(5)api

public interface UserService {
    //根据id查询用户
    User selectById(Long id);

    //根据id查询用户名
    String queryUserName(Long id);
}

(6)apiImpl


@DubboService(version = "v1.0.0")
public class UserServiceImpl implements UserService {

    //把dao接口自动装配到service实现类上
    @Autowired
    private UserMapper userMapper;


    /**
     * 根据id查询用户
     * @param id
     * @return
     */
    public User selectById(Long id) {
        User user = userMapper.selectById(id);
        user.setUsername(user.getUsername()+"v1.0.0");
        return user;
    }


    /**
     * 根据id查询用户名
     * @param id
     * @return
     */
    public String queryUserName(Long id) {
        User user = userMapper.selectById(id);
        String username = user.getUsername();
        return username;
    }

7.application.yml dubbo重点配置

dubbo: #配置dubbo提供者
  protocol: #duboo协议和访问端口
    name: dubbo #协议
    port: 20882 #端口,一般从20880开始
  registry: #nacos地址
    address: nacos://127.0.0.1:8848
  scan: #dubbo包扫描,扫描那个带有@DubboService注解的接口实现类
    base-packages: com.zhang.service
posted @ 2022-11-12 18:16  给我手牵你走  阅读(51)  评论(0编辑  收藏  举报