首页 > 其他分享 >Dubbo系列<3>-服务提供端与消费端应用的搭建

Dubbo系列<3>-服务提供端与消费端应用的搭建

时间:2023-06-08 22:00:41浏览次数:43  
标签:dubbo 系列 Dubbo src import 搭建 com png 10



创建一个工程dubbo,其中一共分三个module:

  1. provider:服务提供者
  2. consumer:服务消费者
  3. api:是针对服务的接口和实体install成jar给provider和consumer使用

Dubbo系列<3>-服务提供端与消费端应用的搭建_spring


1:基于配置方式调用

api结构和代码如下:

Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_02

import java.io.Serializable;

/**
 * 用户信息
 *
 * @Author tianweichang
 * @Date 2018-08-14 15:55
 **/
public class User implements Serializable{
private String name;
private Integer id;

public String getName() {
return name;
    }

public void setName(String name) {
this.name = name;
    }

public Integer getId() {
return id;
    }

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

@Override
    public String toString() {
return "User{" +
"name='" + name + '\'' +
", id=" + id +
'}';
    }
}

Dubbo系列<3>-服务提供端与消费端应用的搭建_spring_03

Dubbo系列<3>-服务提供端与消费端应用的搭建_spring_04

provider结构和代码如下:

Dubbo系列<3>-服务提供端与消费端应用的搭建_maven_05

pom.xml

<?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</artifactId>
<groupId>com.tian.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>provider</artifactId>

<name>provider</name>
<url>http://www.example.com</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>api</artifactId>
<groupId>com.tian.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>


provider.xml

Dubbo系列<3>-服务提供端与消费端应用的搭建_spring_06

具体dubbo服务实现类内容:

Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_07

启动类

Dubbo系列<3>-服务提供端与消费端应用的搭建_spring_08


启动输出:

Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_09

consumer结构和代码如下:

Dubbo系列<3>-服务提供端与消费端应用的搭建_maven_10

pom.xml

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</artifactId>
<groupId>com.tian.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>consumer</artifactId>

<name>consumer</name>
<!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
</properties>

<dependencies>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.4.9</version>
</dependency>
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<artifactId>api</artifactId>
<groupId>com.tian.dubbo</groupId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>

<build>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging -->
                <plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

<?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="consumer-app"/>

<dubbo:registry address="zookeeper://localhost:2181"/>

<!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
    <dubbo:reference id="userService" interface="com.tian.dubbo.service.UserService"/>
</beans>
Consumer类
import com.tian.dubbo.model.User;
import com.tian.dubbo.service.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * Hello world!
 */
public class Consumer {
public static void main(String[] args) throws Exception {
//        FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("E:\\mystudy\\otherCode\\dubbo\\consumer\\src\\main\\resource\\consumer.xml");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("consumer.xml");
        context.start();
// 获取远程服务代理
        UserService userService = (UserService) context.getBean("userService");
// 执行远程方法
        User user = userService.getUserByUserId(1);
        System.out.println(user);
    }
}

启动输出:

Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_11

成功调用到provider提供的dubbo服务


2:基于Dubbo API方式调用

服务端代码:

import com.alibaba.dubbo.config.*;
import com.alibaba.dubbo.registry.Registry;
import com.tian.dubbo.service.impl.UserServiceImpl;

/**
 * Copyright © 2018 上海金互行金融服务有限公司. All rights reserved. *
 * <p>
 * TODO
 *
 * @Author tianweichang
 * @Date 2018-08-15 9:21
 **/
public class TestProviderApi {
public static void main(String[] args) throws InterruptedException {
//相当于<bean id="" class="">
        UserService userService = new UserServiceImpl();
//相当于<dubbo:application name="">
        ApplicationConfig application = new ApplicationConfig();
        application.setName("dubbo-provider");
//注册中心
        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("localhost:2181");
        registry.setProtocol("zookeeper");
//协议和端口
        ProtocolConfig protocol = new ProtocolConfig();
        protocol.setName("dubbo");
        protocol.setPort(20880);
//监控
        MonitorConfig monitor = new MonitorConfig();
        monitor.setProtocol("registry");

//服务端入口类
        ServiceConfig<UserService> service = new ServiceConfig<>();
        service.setApplication(application);
        service.setMonitor(monitor);
        service.setRegistry(registry);
        service.setProtocol(protocol);
        service.setInterface(UserService.class);
        service.setRef(userService);
        service.export();
        Thread.currentThread().join();

    }
}


启动输出:

Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_12


消费端代码:

package com.tian.dubbo;

import com.alibaba.dubbo.config.ApplicationConfig;
import com.alibaba.dubbo.config.MonitorConfig;
import com.alibaba.dubbo.config.ReferenceConfig;
import com.alibaba.dubbo.config.RegistryConfig;
import com.tian.dubbo.service.UserService;

/**
 * 消费端api形式调用
 *
 * @Author tianweichang
 * @Date 2018-08-15 9:47
 **/
public class TestConsumerApi {
public static void main(String[] args) throws InterruptedException {

        ApplicationConfig application = new ApplicationConfig();
        application.setName("dubbo-consumer");

        RegistryConfig registry = new RegistryConfig();
        registry.setAddress("localhost:2181");
        registry.setProtocol("zookeeper");

        MonitorConfig monitor = new MonitorConfig();
        monitor.setProtocol("registry");

        ReferenceConfig<UserService> reference = new ReferenceConfig<UserService>();
        reference.setApplication(application);
        reference.setRegistry(registry);
        reference.setMonitor(monitor);
        reference.setInterface(UserService.class);
        reference.setTimeout(1000);
        reference.setInjvm(false);


        UserService userService = reference.get();
        System.out.println(userService.getUserByUserId(22));

    }
}


启动输出:


Dubbo系列<3>-服务提供端与消费端应用的搭建_xml_13

证明已经调用到了dubbo服务

标签:dubbo,系列,Dubbo,src,import,搭建,com,png,10
From: https://blog.51cto.com/u_11702014/6443683

相关文章

  • 如何科学的搭建一台深度学习服务器?
    在如今的时代,人工智能的技术已经开始使用在各行各业,例如人脸识别等计算机视觉技术已经开始广泛的使用在人们的日常生活中去,如果我们要自己去训练模型,首先我们需要的是寻找到数据集,因为深度学习的技术是需要有非常多的数据,其次最为重要的也就是“算力”,深度学习模型的训练需要基于......
  • html5游戏制作入门系列教程(五)
    我们继续这一系列文章,使用HTML5的canvas组件进行游戏开发。今天,这是相当完整的游戏例子–它会回顾经典的旧电脑游戏–坦克大战。我会教你使用阵列地图并教你如何检测活动对象(坦克)与环境(基于阵列的地图)的碰撞。你可以点击这里阅读这一系列教程的前一篇文章:html5游戏制作入门系列......
  • html5游戏制作入门系列教程(二)
    今天,我们继续html5游戏制作入门系列的系列文章。今天,我们将继续基础知识(也许甚至是高级技巧的基础)。我要告诉你如何具有渐变颜色填充对象,绘制文本,使用自定义的字体绘制文本,基本的动画,以及最重要的UI元素–按钮。 我们以前的文章中,你可以在这里阅读:html5游戏制作入门系列教程(一)。......
  • Golang环境搭建
    1、go环境下载地址:https://studygolang.com/dl2、查看go安装状态:goversion3、学习指南https://tour.go-zh.org/welcome/14、环境变量和相关配置4.1 Windows环境下安装#1、配置Go环境变量-GOROOTGo的安装路径#2、新建文件夹third_go,配置GOPATH环境变量#2.1新建......
  • html5游戏制作入门系列教程(一)
    从今天开始,我们将开始HTML5游戏开发一系列的文章。在我们的第一篇文章中,我们将讲解在画布canvas上的基础工作,创建简单的对象,填充和事件处理程序。另外,要注意在这个阶段中,我们不会立即学习WebGL相关的3D部分。但我们会尽快在未来的WebGL。 在每篇文章中,我们都将学习到一些新的东西......
  • Redis系列15:使用Stream实现消息队列(精讲)
    Redis系列1:深刻理解高性能Redis的本质Redis系列2:数据持久化提高可用性Redis系列3:高可用之主从架构Redis系列4:高可用之Sentinel(哨兵模式)Redis系列5:深入分析Cluster集群模式追求性能极致:Redis6.0的多线程模型追求性能极致:客户端缓存带来的革命Redis系列8:Bitmap实现亿万级......
  • VSCode 插件开发系列教程
    VSCode插件架构,VSCode是通过Electron实现跨平台的,而Electron则是基于Chromium和Node.js,比如VSCode的界面,就是通过Chromium进行渲染的。同时,VSCode是多进程架构,当VSCode第一次被启动时会创建一个主进程(mainprocess),然后每个窗口,都会创建一个渲染进程(Renderer......
  • 在 macOS Catalina 10.15 搭建 PHP 开发环境包括PHP的redis扩展
    2019年10月8日,苹果公司正式发布了新一代macOS,版本为Catalina(11.15)。macOSCatalina预装了Ruby(2.6.3)、PHP(7.3.9)、Perl(5.18.4)、Python(2.7.16)等常用的脚本语言,以及Apache(2.4.41)Web服务器。需要注意的是,在新版本中,zsh已取代bash成为新版操作系统中的......
  • 【Sword系列】第七届全国残疾人职业技能大赛样题-网络安全-手机热点
    前言Wireshark(前称Ethereal)是一个网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据。在过去,网络数据包分析软件是非常昂贵,或是专门属于营利用的软件,Wireshark的出现改变了这一切。在GNU通用公共许可证的保障范围底下,用户可以......
  • docker搭建hadoop和hive集群
    一、安装docker并生成相关的镜像(1)安装docker安装docker教程https://www.runoob.com/docker/centos-docker-install.html只要在终端输入:sudodockerrunhello-world后出现如下图的内容就证明安装docker成功了(2)拉取CentOS镜像(Ubuntu镜像也行)在终端输入:sudodockerpullcent......