分布式RPC框架Dubbo

RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应 用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不 在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。1.Dubbo的架构2.Dubbo使用前安装Zookeeper,Dubbo管理控制台的dubbo-adminZookeeper的安装(在Lunix系统下安装)下载地址:http://archive.apac
摘要由CSDN通过智能技术生成

RPC全称为remote procedure call,即远程过程调用。比如两台服务器A和B,A服务器上部署一个应 用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的方法,由于两个应用不 在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。

1.Dubbo的架构

2.Dubbo使用前安装Zookeeper,Dubbo管理控制台的dubbo-admin

Zookeeper的安装(在Lunix系统下安装)下载地址:http://archive.apache.org/dist/zookeeper/

  1. 安装 jdk
  2. 把 zookeeper 的压缩包(zookeeper-3.4.6.tar.gz)上传到 linux 系 统
  3. 解压缩压缩包 tar -zxvf zookeeper-3.4.6.tar.gz -C /usr
  4. 进入zookeeper-3.4.6目 录,创建data目录 mkdir data
  5. 进入conf目录 ,把zoo_sample.cfg 改名为zoo.cfg cd conf mv zoo_sample.cfg zoo.cfg
  6. 打开zoo.cfg文件, 修改data属性:dataDir=/usr/zookeeper-3.4.6/data
  7. zookeeper的操作      进入Zookeeper的bin目录    启动服务命令 ./zkServer.sh start
  8.                                                                               停止服务命令 ./zkServer.sh stop
  9.                                                                               查看服务状态: ./zkServer.sh status
  10.                                                                               客户端连接 ./zkCli.sh

Dubbo管理控制台的dubbo-admin

(1)将资料中的dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下

(2)启动tomcat,此war文件会自动解压

(3)修改WEB-INF下的dubbo.properties文件,注意dubbo.registry.address对应的值需要对应当前使用的Zookeeper的ip地址和端口号

dubbo.registry.address=zookeeper://192.168.134.129:2181

dubbo.admin.root.password=root

dubbo.admin.guest.password=guest

(4)重启tomcat

访问 http://你的地址:8080/dubbo-admin-2.6.0

3.spring boot 整合Dobbo 

创建三个模块:

前两个用springBoot创建,最后一个只是放接口和实体,用maven创建

 dubbo-interface 

依赖:

<groupId>org.song</groupId>
    <artifactId>dubbo-interface</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

 实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo implements Serializable {
    private String name;
    private String userId;
    private String address;

}

接口

public interface CustomerService {
    public List<UserInfo> initCustomer(String id);
    
    
    public List<UserInfo> getUserInfoList(String id);
}

boot-dubbo-provider 服务提供

依赖

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.song</groupId>
    <artifactId>boot-dubbo-provider</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>boot-dubbo-provider</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <!-- Dubbo Spring Boot Starter Dubbo 与Spring Boot的整合依赖-->
        <dependency>
            <groupId>com.alibaba.boot</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>0.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <!--接口的引入-->
        <dependency>
            <groupId>org.song</groupId>
            <artifactId>dubbo-interface</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件:application.yml

#端口设置
server:
  port: 9001
#dubbo的设置
dubbo:
  application:
    name: boot-dubbo-provider
    #dubbo在zookeeper的注册地址
  registry:
    address: zookeeper://192.168.126.135:2181
    #注册 协议和port 
  protocol:
    name: dubbo
    port: 20881

核心代码:

//@Service这个注解不是spring框架的注解,是dobbo的注解,表示这是一个对外发布服务
@Service
@Component
public class UserInfoServiceImpl implements UserInfoService {
    @Override
    public List<UserInfo> getUserInfoList(String id) {
        UserInfo userInfo1 = new UserInfo("1", "李四", "北京");
        UserInfo userInfo2 = new UserInfo("2", "王五", "上海");
        return Arrays.asList(userInfo1, userInfo2);
    }
}

启动器注解:

/**@EnableDubbo
 * 表示开启Dubbo注解
 */
@SpringBootApplication
@EnableDubbo
public class BootDubboProviderApplication {

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

}

boot-dubbo-customer 服务消费

依赖:与 boot-dubbo-provider一样

配置文件:application.yml

server:
  port: 9005
dubbo:
  application:
    name: boot-dubbo-customer
  registry:
    address: zookeeper://192.168.126.135:2181

核心代码:

service层

@Service
public class CustomeServiceImpl implements CustomerService {
    /**
     * @Reference
     * Dubbo提供的注解,动态代理服务提供者对外发布的服务
     */
    @Reference
    private UserInfoService UserInfo;

    @Override
    public List<UserInfo> initCustomer(String id) {
        List<com.song.bean.UserInfo> userInfoList = UserInfo.getUserInfoList(id);
        return userInfoList;
    }
}

controller

@RestController
@RequestMapping("customer")
public class CustomerController {
    @Resource
    public CustomeServiceImpl service;
    @RequestMapping("{id}")
    public List<UserInfo> getUserInfo(@PathVariable("id")String id){
        List<UserInfo> userInfos = service.initCustomer(id);
        return userInfos;
    }
}

启动器注解:

@SpringBootApplication
@EnableDubbo
public class BootDubboCustomerApplication {
    public static void main(String[] args) {
        SpringApplication.run(BootDubboCustomerApplication.class, args);
    }
}

测试 

访问 :http://192.168.126.135:8080/dubbo-admin-2.6.0

可以看服务提供者与消费者

 

 访问 :http://localhost:9005/customer/2

可以查询到,说明两个微服务间的调用成功

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值