Dubbo 简易环境搭建以及使用(2)

news2024/11/25 10:53:58

目录

环境搭建

Dubbo的3种使用方式:

1. XML配置的方式,一般用于Spring MVC工程

2. 配置文件的方式 (spring boot工程)

3. 注解方式

Dubbo 控制台


环境搭建

本篇将介绍Spring boot + zookeeper + Dubbo 简易环境的搭建以及使用,首先准备好一台虚拟机。

1. 在虚拟机上安装JDK8及以上版本,可以参考我的另一篇博客 https://www.cnblogs.com/chen1-kerr/p/6907280.html

2. 在虚拟机上安装zookeeper。可以是单机,也可以是集群。可以参考我的文件

单机: zookeeper 单机环境搭建(三)_chen_yao_kerr的博客-CSDN博客 

集群: zookeeper集群(二)_zookeeper集群相互发现_chen_yao_kerr的博客-CSDN博客 

3. 新建2个spring boot工程,一个是Server端,一个是client端,并且引入zookeeper 和 dubbo依赖的jar包。

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>dubbo-basic</artifactId>
        <groupId>com.enjoy</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>busi-xml-server-client</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.enjoy</groupId>
            <artifactId>busi-api</artifactId>
            <version>1.0</version>
        </dependency>
        <!-- spring支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- dubbo -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-config-spring</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <!-- zookeeper注册中心 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-registry-zookeeper</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-rpc-dubbo</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-remoting-netty</artifactId>
            <version>${dubbo.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo-serialization-hessian2</artifactId>
            <version>${dubbo.version}</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit_version}</version>
        </dependency>
    </dependencies>
</project>

 我本次使用的虚拟机IP是 192.168.0.105。 因此,需要到这台虚拟机服务器上启动zookeeper

抽象出接口:

Dubbo的3种使用方式:

1. XML配置的方式,一般用于Spring MVC工程

服务端(Server)

服务端需要去实现这个接口,因为这个实现类要提供具体的业务处理逻辑:

服务端的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:context="http://www.springframework.org/schema/context"
       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://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
	 http://code.alibabatech.com/schema/dubbo
	 http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <!--全局配置-->
    <dubbo:provider timeout="3000" />
    <!-- 服务提供方应用名称, 方便用于依赖跟踪 -->
    <dubbo:application name="busi-server"/>
    <!-- 使用本地zookeeper作为注册中心 -->
    <dubbo:registry address="zookeeper://192.168.0.105:2181" />

    <!--name指示使用什么协议监听端口:dubbo/rmi/rest-->
    <dubbo:protocol id="d1"  name="dubbo" port="20880" />
    <dubbo:protocol id="d2"  name="dubbo" port="20882" />

    <!-- 通过xml方式配置为bean, 让spring托管和实例化 -->
    <bean id="orderService" class="com.enjoy.service.OrderServiceImpl"/>
    <!-- 声明服务暴露的接口,并暴露服务 -->
    <dubbo:service interface="com.enjoy.service.OrderService" ref="orderService" protocol="d1" />
</beans>

、客户端(Consumer):

<?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:context="http://www.springframework.org/schema/context"
       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://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd
	 http://code.alibabatech.com/schema/dubbo
	 http://code.alibabatech.com/schema/dubbo/dubbo.xsd">

    <dubbo:application name="busi-client" />
    <dubbo:registry address="zookeeper://192.168.0.105:2181" />
    <dubbo:consumer />

    <dubbo:reference id="orderService" interface="com.enjoy.service.OrderService" />

</beans>

启动Server:

启动客户端:

2. 配置文件的方式 (spring boot工程)

首先在Server端定义配置文件:

开放一个业务类:

服务端加载配置:

在Consumer端定义配置文件

定义一个类,这个类要从远程服务器上拿到需要使用的实例

消费端调用:

3. 注解方式

这种方式其实和第2种方式基本一致,唯一的不同就是少了个配置文件,这个配置文件,多了些注入的类:

服务端代码:

/*
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements.  See the NOTICE file distributed with
 *   this work for additional information regarding copyright ownership.
 *   The ASF licenses this file to You under the Apache License, Version 2.0
 *   (the "License"); you may not use this file except in compliance with
 *   the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */

package com.enjoy.dubbo.annotation;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ProtocolConfig;
import com.alibaba.dubbo.config.ProviderConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

public class Provider {

    public static void main(String[] args) throws Exception {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ProviderConfiguration.class);
        context.start();
        System.out.println("---------dubbo启动成功--------");
        System.in.read();
    }

    @Configuration
    @EnableDubbo(scanBasePackages = "com.enjoy.service")
    static class ProviderConfiguration {
        @Bean
        public ProviderConfig providerConfig() {
            ProviderConfig providerConfig = new ProviderConfig();
            providerConfig.setTimeout(1000);
            return providerConfig;
        }

        @Bean
        public ApplicationConfig applicationConfig() {
            ApplicationConfig applicationConfig = new ApplicationConfig();
            applicationConfig.setName("busi-provider");
            return applicationConfig;
        }

        @Bean
        public RegistryConfig registryConfig() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setProtocol("zookeeper");
            registryConfig.setAddress("192.168.0.105");
            registryConfig.setPort(2181);
            return registryConfig;
        }

        @Bean
        public ProtocolConfig protocolConfig() {
            ProtocolConfig protocolConfig = new ProtocolConfig();
            protocolConfig.setName("dubbo");
            protocolConfig.setPort(20880);
            return protocolConfig;
        }
    }

}

客户端:

/*
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements.  See the NOTICE file distributed with
 *   this work for additional information regarding copyright ownership.
 *   The ASF licenses this file to You under the Apache License, Version 2.0
 *   (the "License"); you may not use this file except in compliance with
 *   the License.  You may obtain a copy of the License at
 *
 *       http://www.apache.org/licenses/LICENSE-2.0
 *
 *   Unless required by applicable law or agreed to in writing, software
 *   distributed under the License is distributed on an "AS IS" BASIS,
 *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *   See the License for the specific language governing permissions and
 *   limitations under the License.
 *
 */

package com.enjoy.dubbo.annotation;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.ConsumerConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.alibaba.dubbo.config.spring.context.annotation.EnableDubbo;
import com.enjoy.action.ServiceConsumer;
import com.enjoy.entity.OrderEntiry;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

public class Consumer {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(ConsumerConfiguration.class);
        context.start();
        System.out.println("---------dubbo启动成功--------");
        ServiceConsumer serviceConsumer = context.getBean(ServiceConsumer.class);
        OrderEntiry entiry = serviceConsumer.getDetail("1");
        System.out.println("result: " + entiry.getMoney());
    }

    @Configuration
    @EnableDubbo(scanBasePackages = "com.enjoy.action")
    @ComponentScan(value = {"com.enjoy.action"})
    static class ConsumerConfiguration {
        @Bean
        public ApplicationConfig applicationConfig() {
            ApplicationConfig applicationConfig = new ApplicationConfig();
            applicationConfig.setName("busi-consumer");
            return applicationConfig;
        }

        @Bean
        public ConsumerConfig consumerConfig() {
            ConsumerConfig consumerConfig = new ConsumerConfig();
            consumerConfig.setTimeout(3000);
            return consumerConfig;
        }

        @Bean
        public RegistryConfig registryConfig() {
            RegistryConfig registryConfig = new RegistryConfig();
            registryConfig.setProtocol("zookeeper");
            registryConfig.setAddress("192.168.0.105");
            registryConfig.setPort(2181);
            return registryConfig;
        }
    }
}

其实,具体怎么用,可根据实际情况进行选择。如果是Spring MVC工程,选第一种方式比较好。如果是Spring boot工程,我个人倾向于选择第二种方式,也就是注解+配置文件的方式。

Dubbo 控制台

dubbo-admin 的地址为: mirrors / apache / dubbo-admin · GitCode 

但是,我使用命令拉下来总是少文件,所有我直接下载的zip包解压。

 修改配置:

 编译并启动:

能打开页面,能够登录即可:

上方介绍了集中服务端启动的方式,选择任意一种方式启动服务端代码,如果在控制台能够发现即可:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/472064.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

同等学力申硕如何择校?

我们常常会在一些艰难选择面前不知所措&#xff0c;比如说不知道选择什么样的院校学习&#xff0c;不知道选择什么样的专业学习&#xff0c;不知道同等学力申硕的具体过程&#xff0c;不知道这个过程中你要付出多大的代价&#xff0c;更不知道学习中的一些关键环节等&#xff0…

飞利浦水健康携净水新品重磅亮相AWE2023

2023年度中国家电及消费电子博览会&#xff08;AWE2023&#xff09;于4月27日在上海新国际博览中心正式开幕。其中&#xff0c;飞利浦水健康携全屋高阶净水G5系列、厨下净水器U22Pro、冰热矿净四合一台式净饮机等新品悉数亮相&#xff0c;在暌违2年的AWE舞台上&#xff0c;为行…

垃圾分类算法训练及部署

垃圾分类算法训练及部署 创建模型与编译模型训练及保存模型生成模型应用 创建模型与编译 数据加载进模型后定义模型结构&#xff0c;并优化损失函数。直接调用VGG-16模型作为卷积神经网络&#xff0c;包括13个卷积层、3个全连接层、5个池化层&#xff0c;后接全连接层&#xf…

终于把 vue-router 运行原理讲明白了(一)!!!

一、vue-router 用法 1.1 首先我们需要在我们的项目中&#xff0c;下载vue-router&#xff0c;我在项目中使用的是3.x版本 1.2 在项目中引入&#xff0c;并实例化路由实例&#xff0c;贴代码如下 1.3 下面代码有两个重点部分&#xff0c;等在第三部分具体分析 &#xff08;1&a…

FAMI-Pose训练

之前写过FAMI-Pose的论文解析&#xff0c;最近跑了一下官方代码&#xff0c;链接是&#xff1a;FAMI-Pose&#xff0c;但有很多问题&#xff0c;感觉是不是作者上传错了。这篇博客讲一下FAMI-Pose的训练。 运行 首先&#xff0c;安装环境&#xff0c;这个根据官方requirement…

NTT入门 开拓者的卓识

link 大意&#xff1a; 给定一个长度为n的数组a&#xff0c;求[1,n]的k阶子段和 我们定义k阶子段和如下&#xff1a; 思路&#xff1a; 这个k阶字段和&#xff0c;就是在k-1阶的基础上&#xff0c;再讲所有k-1阶的子段和都相加得到k阶子段和 k是很大的&#xff0c;所以我…

【C++学习】unordered_map和unordered_set的使用和封装

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《C学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; unordered_map和unordered_set &#x1f9e2;unordered_map/set&#x1f52e;性能比较&#x1f52e;成…

Python采集二手车数据信息实现数据可视化展示

前言 嗨喽&#xff0c;大家好呀~这里是爱看美女的茜茜呐 环境使用&#xff1a; Python 3.8 Pycharm 专业版是付费的 <文章下方名片可获取魔法永久用~> 社区版是免费的 模块使用&#xff1a; 第三方模块 需要安装的 requests >>> pip install requests p…

分享5款让生活和工作变得更加高效的软件

随着科技的发展,我们的生活和工作变得越来越数字化和自动化。许多实用软件应运而生,它们不仅简化了我们的生活,也使工作变得更加高效。这里我们来介绍5款非常实用的软件工具。 1.安全擦除工具——Secure Eraser Secure Eraser是一款可以安全删除数据的工具&#xff0c;它使用…

基于铜锁,在前端对登录密码进行加密,实现隐私数据保密性

本文将基于 铜锁&#xff08;tongsuo&#xff09;开源基础密码库实现前端对用户登录密码的加密&#xff0c;从而实现前端隐私数据的保密性。 首先&#xff0c;铜锁密码库是一个提供现代密码学算法和安全通信协议的开源基础密码库&#xff0c;在中国商用密码算法&#xff0c;例…

京东T7架构师用470页就把微服务架构原理与开发实战文档讲完了

前言 最近几年软件开发方法层出不穷&#xff0c;微服务作为一种主流的架构模式一直热度不减。 为了帮助广大程序员们更好更快地理解微服务的概念&#xff0c;学习微服务在项目中的实践&#xff0c;本文全面阐述了微服务架构模式的特点、架构思路、设计理念、技术框架及具体的…

根据cadence设计图学习硬件知识day07 了解一些芯片

1.LC0502N &#xff08;ESD静电保护元件&#xff09; 1.1 LC0502N 介绍 应用 ● USB 2.0电源和数据线 ● 机顶盒和数字电视 ● 数字视频接口&#xff08;DVI&#xff09; ● 笔记型电脑 ● SIM端口 ● 10/100以太网 1.2 LC0502N 引脚介绍 &#xff08;无语&#xff0…

1。C语言基础知识回顾

学习嵌入式的C基础知识&#xff0c;主要包括几个核心知识点&#xff1a;三大语法结构、常用的数据类型、函数、结构体、指针、文件操作。 一、顺序结构 程序自上而下依次执行、没有分支、代码简单。 常见顺序结构有&#xff1a;四则运算&#xff1a;&#xff0c;-&#xff0…

通达信顾比倒数线指标公式,信号不漂移

顾比倒数线是由技术派大师戴若顾比发明的&#xff0c;该指标利用三个重要的价格来判断入场或离场时机&#xff0c;可用于盘后制定下一个交易日的操作计划。此外&#xff0c;顾比倒数线还可以用于补充验证其他指标。 在编写顾比倒数线选股公式之前&#xff0c;需要先了解顾比倒…

vue3之vite创建h5项目之2 (sass公共样式、声明组件、路由配置和layout组件 )

目录 vue3之vite创建h5项目之2 &#xff08; &#xff09;1&#xff1a;安装sass1-1 使用sass引入公共样式11-1-1 main.ts 引入公共样式方式 1-2 vite.config.ts 引入公共样式方式21-3样式文件1-3-1 src / style / index.scss ( 适配iphonex等还有引入其他公共的样式 )1-3-2 sr…

CRM部署Always on 后 CRM报无法更新数据库,数据库只读,且读写分离不正常

CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读&#xff0c;读写分离不正常 问题描述背景信息问题原因解决方案 问题描述 CRM部署Always on 后 CRM报无法更新数据库&#xff0c;数据库只读 读写分离不正常,出现错乱链接。 背景信息 1.2个节点配置SQL serve…

从安全气囊到标配EDR,TOP10控制器供应商领跑市场

2022年1月1日开始&#xff0c;国内新生产新乘用车都必须标配EDR&#xff08;Event Data Recorder&#xff09;&#xff0c;也就是俗称的汽车“黑匣子”&#xff0c;也称为汽车事件数据记录系统&#xff0c;记录的数据可重现事故过程&#xff0c;用于汽车事故分析。 在此之前&am…

【常用算法】进制转换

目录 1. 二进制数、八进制数、十六进制数转换为十进制数 2. 十进制数转换为二进制数、八进制数、十六进制数 3. 二进制数和十六进制数的相互转换 4. 使用电脑计算器进行进制转换 1. 二进制数、八进制数、十六进制数转换为十进制数 十进制数的每一位都是10的指数幂。如&…

基于趋动云的 Stable Diffusion Webui 环境搭建

Stable Diffusion Webui 环境搭建&#xff0c;首先新建一个项目&#xff1a; 然后&#xff0c;选择镜像。注意点公开的&#xff0c;已近做好的这个镜像&#xff0c;superx创建&#xff0c;集成了miniconda3的镜像。 然后选择添加数据源&#xff0c;一样&#xff0c;还是点公开&…

Epinio:Kubernetes 的应用程序开发引擎

王海龙&#xff0c;Rancher 中国社区技术经理&#xff0c;Linux Foundation APAC Evangelist&#xff0c;负责 Rancher 中国技术社区的维护和运营。拥有 9 年的云计算领域经验&#xff0c;经历了 OpenStack 到 Kubernetes 的技术变革&#xff0c;无论底层操作系统 Linux&#x…