分布式理论 & RPC & Dubbo

 

 

分布式服务框架(RPC)

用于提高机器利用率的资源调度和治理中心*(SOA)[ Service Oriented Architecture]

 

 

 

 

Dubbo(RPC框架)

 

 服务提供者**(Provider)**:暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提 供的服务。

服务消费者**(Consumer)**: 调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自 己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如 果调用失败,再选另一台调用。

注册中心**(Registry)**:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基 于长连接推送变更数据给消费者

监控中心**(Monitor)**:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发 送一次统计数据到监控中心

 

荐我们使用Zookeeper 注册中心

Zookeeper官网:https://zookeeper.apache.org/

下载地址:https://archive.apache.org/dist/zookeeper/

修改zkServer.cmd 添加"-Dzookeeper.audit.enable=true"

 

 先打开服务端,再打开客户端

 

简单测试使用

s /:列出zookeeper根下保存的所有节点
create –e /oop 123:创建一个oop节点,值为123
get /oop:获取/kuangshen节点的值

 

安装Dubbo

dubbo-admin-master-0.2.0\dubbo-admin\src\main\resources
#注册中心的地址  注意端口号
dubbo.registry.address=zookeeper://127.0.0.1:2181

在项目目录下打包dubbo-admin

mvn clean package -Dmaven.test.skip=true

若是没有配置maven环境(用的IDEA的)

把dubbo-admin在idea中打开(执行main方法)就行(记得提前开启Zookeeper服务)

 

访问

http://localhost:7001/  (账号密码都是root)

dubbo-admain: 是一个监控管理后台 ,查看我们注册了哪些服务,哪些服务被消费

 

搭建一个简单的环境

流程:

provider--->注册中心--->consumer

创建好provider项目(做好服务)与consumer项目 

先开启zkServer,然后开启provider,再打开dubbo-admin就可以在界面中查看到相关的服务提供者,然后consumer去获取需要的服务就行

 

 

2.让provider连接注册中心

导入依赖

复制代码
<dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.8</version>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
        </dependency>
<!--        引入zookeeper-->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>5.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>5.2.1</version>
        </dependency>
<!--      注意  zookeeper 日志冲突-->
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.6.3</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
View Code
复制代码

配置

复制代码
server.port=8001
#服务应用名字
dubbo.application.name=provider-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
#哪些服务要被注册
dubbo.scan.base-packages=com.ljm.service
View Code
复制代码

加注解 2个

复制代码
//服务注册与发现

@Service   //注入bean
@DubboService  //注册中心相关  ,项目启动就自动注册到注册中心
public class TIcketServiceImpl implements TIcketService{
    @Override
    public String getTicket() {
        return "您的票号55678";
    }
}
View Code
复制代码

启动dubbo-admin( 访问http://localhost:7001/)

 

3.consumer消费

导入依赖(与provider相同)

创建一个与provider相同的接口

配置

复制代码
server.port=8002
#去哪里拿服务  需要暴露自己的名字
dubbo.application.name=consumer-server
#注册中心地址
dubbo.registry.address=zookeeper://127.0.0.1:2181
View Code
复制代码

获取服务

复制代码
@Service
public class UserService1 {

    @DubboReference  //引用   也可以用pom坐标,可以定义路径相同的接口名
    TIcketService ICKET_SERVICE;  //与provider相同的接口

    public void buyTicker(){
        String ticket = ICKET_SERVICE.getTicket();
        System.out.println("拿到票:"+ticket);
    }
}


//测试
@SpringBootTest
class ConsumerServerApplicationTests {
    @Autowired
    UserService1 userService1;

    @Test
    void contextLoads() {
        userService1.buyTicker();
    }

}
View Code
复制代码

 

posted @   磕伴  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示