dubbo安装及使用

这篇具有很好参考价值的文章主要介绍了dubbo安装及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

dubbo安装及使用

新手笔记,存在错误还请指正

尚硅谷dubbo

dubbo的github地址
dubbo官方文档

dubbo和zookeeper的关系

dubbo和zookeeper的关系

zookeeper安装

zookpper安装

dubbo快速入门

概念

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。(rpc的两个核心模块即:通讯,序列化。)
设计架构:
dubbo安装及使用

环境搭建

一、打开zookeeper
二、安装dubbo-admin管理控制台
dubbo本身并不是一个服务软件。它其实就是一个jar包能够帮你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。所以不用在Linux上启动什么dubbo服务。
但是为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序,不过这个监控即使不装也不影响使用。
下载地址:
dubbo-admin
进入目录,修改dubbo-admin配置:
修改 src\main\resources\application.properties 指定zookeeper地址
dubbo安装及使用
打包dubbo-admin,cmd中运行:

mvn clean package -Dmaven.test.skip=true 

运行dubbo-admin

java -jar dubbo-admin-0.0.1-SNAPSHOT.jar

在浏览器中访问localhost:7001即可访问管理页面(用户名密码均为root)
三、创建工程
需求:
某个电商系统,订单服务需要调用用户服务获取某个用户的所有地址;我们现在需要创建两个服务模块。

订单服务web模块:创建订单等
用户服务web模块:查询用户地址等

实现:两个模块在不同的服务器并且A可以远程调用B的功能。
1、服务提供者
dubbo安装及使用
定义一个实体bean,和一个服务提供service


public class UserAddress implements Serializable {
    private Integer id;
    private String userAddress;
    private String userId;
    private String consignee;
    private String phoneNum;
    private String isDefault;

    public UserAddress() {
        super();
    }

    public UserAddress(Integer id, String userAddress, String userId, String consignee, String phoneNum, String isDefault) {
        this.id = id;
        this.userAddress = userAddress;
        this.userId = userId;
        this.consignee = consignee;
        this.phoneNum = phoneNum;
        this.isDefault = isDefault;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    public String getUserId() {
        return userId;
    }

    public void setUserId(String userId) {
        this.userId = userId;
    }

    public String getConsignee() {
        return consignee;
    }

    public void setConsignee(String consignee) {
        this.consignee = consignee;
    }

    public String getPhoneNum() {
        return phoneNum;
    }

    public void setPhoneNum(String phoneNum) {
        this.phoneNum = phoneNum;
    }

    public String getIsDefault() {
        return isDefault;
    }

    public void setIsDefault(String isDefault) {
        this.isDefault = isDefault;
    }

    @Override
    public String toString() {
        return "UserAddress{" +
                "id=" + id +
                ", userAddress='" + userAddress + '\'' +
                ", userId='" + userId + '\'' +
                ", consignee='" + consignee + '\'' +
                ", phoneNum='" + phoneNum + '\'' +
                ", isDefault='" + isDefault + '\'' +
                '}';
    }
}

public class UserServiceImpl implements UserService {
    @Override
    public List<UserAddress> getUserAddressList(String userId) {
        System.out.println("UserServiceImpl.....old...");
        // TODO Auto-generated method stub
        UserAddress address1 = new UserAddress(1, "北京市昌平区宏福科技园综合楼3层", "1", "李老师", "010-56253825", "Y");
        UserAddress address2 = new UserAddress(2, "深圳市宝安区西部硅谷大厦B座3层(深圳分校)", "1", "王老师", "010-56253825", "N");
        return Arrays.asList(address1,address2);
    }
}

2、服务消费者

加入同样的bean实体和一个订单service

public class OrderServiceImpl implements OrderService {
	UserService userService;
	@Override
	public List<UserAddress> initOrder(String userId) {
		// TODO Auto-generated method stub
		System.out.println("用户id:"+userId);
		//1、查询用户的收货地址
		List<UserAddress> addressList = userService.getUserAddressList(userId);
		for (UserAddress userAddress : addressList) {
			System.out.println(userAddress.getUserAddress());
		}
		return addressList;
	}
	
}

但userservice和订单service在不同的工程中,这时就需要用到dubbo.

工程架构
1、分包
建议将服务接口,服务模型,服务异常等均放在 API 包中,因为服务模型及异常也是 API 的一部分,同时,这样做也符合分包原则:重用发布等价原则(REP),共同重用原则(CRP)。
如果需要,也可以考虑在 API 包中放置一份 spring 的引用配置,这样使用方便,只需在 spring 加载过程中引用此配置即可,配置建议放在模块的包目录下,以免冲突,如:com/alibaba/china/xxx/dubbo-reference.xml。
2、粒度
服务接口尽可能大粒度,每个服务方法应代表一个功能,而不是某功能的一个步骤,否则将面临分布式事务问题,Dubbo 暂未提供分布式事务支持。
服务接口建议以业务场景为单位划分,并对相近业务做抽象,防止接口数量爆炸。
不建议使用过于抽象的通用接口,如:Map query(Map),这样的接口没有明确语义,会给后期维护带来不便。
创建公共接口工程
创建公共接口工程,将上述bean和功能接口复制进去,将服务者和消费者的bean和service接口删掉:
dubbo安装及使用
在consumer和provider中引入公共接口依赖:

    <dependency>
        <groupId>org.example</groupId>
        <artifactId>gmall-interface</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
引入dubbo

为了使订单service可以成功实现远程调用用户service,需要使用dubbo进行改造。
步骤:

1、将服务提供者注册到注册中心(暴露服务)
	1)、导入dubbo依赖(2.6.2)\操作zookeeper的客户端(curator)
	2)、配置服务提供者
 
2、让服务消费者去注册中心订阅服务提供者的服务地址

首先在服务和消费模块引入依赖:

        <!--Dubbo的起步依赖,版本2.7之后统一为rg.apache.dubb -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.2</version>
        </dependency>

        <!--ZooKeeper客户端实现 -->
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>2.12.0</version>
        </dependency>

服务端provider.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd
       ">

<!--    配置提供者-->
    <!--当前应用/服务的名字(同样的服务名字相同,不要和别的服务同名)  -->
    <dubbo:application name="user-service-provider"></dubbo:application>
    <!--指定注册中心的地址  -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />
    <!--使用dubbo协议,将服务暴露在20880端口  -->
    <dubbo:protocol name="dubbo" port="20880" />
    <!-- 指定需要暴露的服务 ref:指向服务的真正实现对象-->
    <dubbo:service interface="com.atguigu.gmall.service.UserService" ref="userServiceImpl" />
    <bean id="userServiceImpl" class="com.atguigu.gmail.service.impl.UserServiceImpl"></bean>
    
</beans>

服务端consumer.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <context:component-scan base-package="com.atguigu.gmall.service.impl"></context:component-scan>
    <!-- 应用名 -->
    <dubbo:application name="order-service-consumer"></dubbo:application>
    <!-- 指定注册中心地址 -->
    <dubbo:registry address="zookeeper://127.0.0.1:2181" ></dubbo:registry>
    <!-- 声明需要调用的远程服务的接口:生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="userService" interface="com.atguigu.gmall.service.UserService"></dubbo:reference>

</beans>

在orderServiceImpl中给其加上@Service注解,将给userservice上加@Autowired注解注入容器。
启动服务

//服务端
public class MainApplication {
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:provider.xml");
        context.start();
        System.in.read();
    }
}

//消费端
public class MainApplication {
    @SuppressWarnings("resource")
    public static void main(String[] args) throws IOException {
        ClassPathXmlApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:consumer.xml");
        OrderService order = context.getBean(OrderService.class);
        order.initOrder("1");
                System.in.read();

    }

}

两个应用启动成功后在dubbo admin管理页面就可以看到相应的信息。

访问initOrder请求,会调用UserService获取用户地址;
调用成功。说明我们order已经可以调用远程的UserService了;

监控中心安装

前面安装过的dubbo-admin是图形化的服务管理页面;安装时需要指定注册中心地址,即可从注册中心中获取到所有的提供者/消费者进行配置管理。

dubbo-monitor-simple是一个简单的监控中心;
安装步骤:
安装
1、下载 dubbo-ops
ops
2、修改配置指定注册中心地址
进入 dubbo-monitor-simple\src\main\resources\conf
修改 dubbo.properties文件
dubbo安装及使用

3、打包dubbo-monitor-simple

mvn clean package -Dmaven.test.skip=true

4、解压 tar.gz 文件,并运行dubbo-monitor-simple-2.0.0中bin目录下的start.bat
dubbo安装及使用

如果缺少servlet-api,自行导入servlet-api再访问监控中心

访问8080端口:
dubbo安装及使用在consumer.xml和provider.xml中配置监控中心

<!--    所有服务配置连接监控中心,进行监控统计-->
    <!-- 监控中心协议,如果为protocol="registry",表示从注册中心发现监控中心地址,否则直连监控中心 -->
    <dubbo:monitor protocol="registry"></dubbo:monitor>

与springboot整合

新建springboot的provider和consumer项目,将service实现复制进去,同样的将gmall-interface通用接口的依赖导入两个应用中。

引入dubbo和curator的依赖
在两个应用中引入依赖,注意springboot和dubbo的版本要适配。

<!--    我的是springboot2.6.7-->
       <dependency>
           <groupId>org.apache.dubbo</groupId>
           <artifactId>dubbo-spring-boot-starter</artifactId>
           <version>2.7.8</version>
       </dependency>
       <dependency>
           <groupId>org.apache.curator</groupId>
           <artifactId>curator-framework</artifactId>
           <version>4.3.0</version>
       </dependency>

       <dependency>
           <groupId>org.apache.curator</groupId>
           <artifactId>curator-recipes</artifactId>
           <version>4.3.0</version>
       </dependency>
       <dependency>
           <groupId>org.apache.zookeeper</groupId>
           <artifactId>zookeeper</artifactId>
           <version>3.4.9</version>
           <exclusions>
               <exclusion>
                   <groupId>org.slf4j</groupId>
                   <artifactId>slf4j-log4j12</artifactId>
               </exclusion>
           </exclusions>
       </dependency>

properties文件配置:

提供者配置:
dubbo.application.name=boot-user-service-provider
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
dubbo.scan.base-package=com.atguigu.gmall #配置包扫描规则,开启了的话基于不用配置@EnableDubbo了
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
dubbo.monitor.protocol=registry
#application.name就是服务名,不能跟别的dubbo提供端重复
#registry.protocol 是指定注册中心协议
#registry.address 是注册中心的地址加端口号
#protocol.name 是分布式固定是dubbo,不要改。
#base-package  注解方式要扫描的包
消费者配置:
server.port=8081  #和监控中心端口号重叠,改一下
dubbo.application.name=boot-order-service-consumer
dubbo.registry.protocol=zookeeper
dubbo.registry.address=127.0.0.1:2181
dubbo.scan.base-package=com.atguigu.gmall
dubbo.protocol.name=dubbo
dubbo.monitor.protocol=registry

在要暴露的提供者服务上加上dubbo的@service注解

import org.apache.dubbo.config.annotation.DubboService;
@DubboService //暴露服务
@Component
public class UserServiceImpl implements UserService {

   @Override
   public List<UserAddress> getUserAddressList(String userId) {
   ......
   }

在消费者服务中引入远程调用service注解

@Service
public class OrderServiceImpl implements OrderService {

  //@Autowired
   @DubboReference
  UserService userService;
  ......
  }

在两个应用中要开启dubbo功能

@EnableDubbo //开启基于注解的dubbo功能
@SpringBootApplication
public class BootOrderServiceConsumerApplication {

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

}

在消费者服务中增加controller层

@Controller
public class OrderController {
	
	@Autowired
	OrderService orderService;
	
	@ResponseBody
	@RequestMapping("/initOrder")
	public List<UserAddress> initOrder(@RequestParam("uid")String userId) {
		return orderService.initOrder(userId);
	}

}

访问如下地址

//随便带上一个uid
http://localhost:8081/initOrder?uid=1

访问成功:
dubbo安装及使用

dubbo配置

可以看我整理的另一篇文章:
dubbo配置

dubbo高可用

文章地址:
dubbo高可用文章来源地址https://www.toymoban.com/news/detail-450334.html

到了这里,关于dubbo安装及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PyCharm免费安装和新手使用教程

    Python+Pycharm安装包和激活码 都打包好了, 保存图片到 wx扫描二v码免费领取 简介 PyCharm是一款由JetBrains公司开发的Python集成开发环境(IDE)。它提供了一系列强大的功能,包括自动代码完成、语法高亮、自动缩进、代码重构、调试器、测试工具、版本控制工具等,使开发者可

    2024年02月10日
    浏览(50)
  • 最新PyCharm免费安装和新手使用教程

    介绍 PyCharm是一款由JetBrains开发的强大的Python集成开发环境(IDE),它支持代码智能提示、语法高亮、代码重构、调试和单元测试等多种功能,让Python编程变得更加高效和舒适。PyCharm还支持多种框架和技术,如Django、Flask、科学计算和数据分析等,可以帮助开发人员更快地构

    2024年02月07日
    浏览(36)
  • bug篇之基于docker安装nacos(2.1.1)使用dubbo连接不上的问题

            说明:首先我的nacos安装是 2.1.1 版本,请注意版本问题。 另外启动时用dubbo的话必须先启动服务提供者再启动服务使用者,否则会报错,同时也必须开放三个端口:8848,9848,9849 java.lang.IllegalStateException: Failed to check the status of the service com.laoyang.Interface.IUserRpc. No

    2024年02月14日
    浏览(43)
  • 测试新手百科:Postman简介、安装、入门使用方法详细攻略!

    本文:Postman基础 目录 一、Postman背景介绍 二、Postman的操作环境 三、Postman下载安装 四、Postman的基础功能 五、接口请求流程 六、管理用例—Collections 七、身份验证Authentication  用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请

    2024年02月11日
    浏览(63)
  • Github Desktop 下载、安装、汉化和卸载(新手入门使用教程)

    打开GitHub Desktop官网https://desktop.github.com/ 点击 download for Windows(64bit),下载 GitHub Desktop 启动安装 双击下载好的安装包,启动安装 安装进度 显示安装进度页面,稍微耐心等等,页面消失即安装完成 GithubDesktopZhTool为GitHubDesktop汉化工具。 注:遇到汉化失败,重试一下子。 意

    2024年04月17日
    浏览(142)
  • 【Docker容器】Docker安装MySQL镜像详细步骤(适合新手使用)

    前言 自从用了Docker之后,发现装东西是真的香,不用在自己根据下载压缩包一个个的去解压、执行、配置环境等等操作。想要啥直接就用Docker直接即拿即用,灰常的舒服啊。话不多说,正式开干,直接开始安装步骤。以下所有的安装前提是你装了Docker引擎了,不要告诉我连

    2023年04月25日
    浏览(79)
  • 手把手教你使用anaconda安装pytorch环境(适合新手)

    如果你右键电脑有(nvidia控制面板)则不要以下操作 没有的话需要进行以下操作 (右键此电脑,找到管理然后打开) 找到设备管理器 找到显示适配器(这里会有你的显卡型号) 根据以上的信息以后我们就可以对应我们的显卡去英伟达官网上去找相对应的显卡驱动更新或者

    2024年01月17日
    浏览(54)
  • 新手建站:腾讯云轻量服务器安装宝塔镜像和使用方法

    腾讯云轻量应用服务器宝塔面板怎么用?轻量应用服务器如何安装宝塔面板?在镜像中选择宝塔Linux面板腾讯云专享版,在轻量服务器防火墙中开启8888端口号,然后远程连接到轻量服务器执行宝塔面板账号密码查询命令,最后登录和管理宝塔面板即可。腾讯云服务器网来详细

    2024年02月05日
    浏览(49)
  • Android逆向之旅—反编译利器Apktool使用教程(Apktool的安装使用)建议新手浏览

    首先下载apktool.bat和apktool.jar 官网地址:https://ibotpeaches.github.io/Apktool/install/ 这个译文: 1.下载Windows包装脚本(右键单击,将链接另存为apktool.bat) 2.下载apktool-2(在此处查找最新版本) 3.将下载的jar重命名为apktool.jar 4.将两个文件(apktool.jar和apktool.bat)移动到Windows目录(通常

    2024年02月02日
    浏览(46)
  • Linux下使用yum安装的东西都去哪儿了?(新手友好)

    使用yum安装的软件包通常都会遵循相似的目录结构 安装路径 含义 /etc 配置文件 /var/log 日志文件 /usr/sbin 可执行文件(包括服务管理工具) 上面给出的是一些软件包安装几乎必备的几个安装路径,具体用yum去安装不同的软件包还会有不同的分配情况。 比如安装Nginx 对于Nginx包来

    2024年02月03日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包