1.Dubbo的基本架构
节点角色说明:
节点 | 角色说明 |
---|---|
Provider | 暴露服务的服务提供方。 |
Consumer | 调用远程服务的服务消费方。 |
Registry | 服务注册与发现的注册中心。 |
Monitor | 统计服务的调用次数和调用时间的监控中心。 |
调用关系说明: |
- 服务容器负责启动,加载,运行服务提供者。
- 服务提供者在启动时,向注册中心注册自己提供的服务。
- 服务消费者在启动时,向注册中心订阅自己所需的服务。
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
- 服务消费者,从提供者地址列表中,基于负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
- 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
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
标签:dubbo,调用,入门,Long,public,案例,user,id
From: https://www.cnblogs.com/zhangdashuaige/p/16884361.html