SpringCloud Alibaba集成Dubbo实现远程服务间调用

news2024/11/16 23:37:54

SpringCloud Alibaba集成Dubbo实现远程服务间调用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2X4hYOm7-1676772812773)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212440924.png)]

工程创建

一、创建springBoot分模块项目,父工程:springcloud-alibaba以及子模块product-dubbo-provider、order-dubbo-consumer等

项目基本结构图如下所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TVJdb83Z-1676772812774)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218212812556.png)]

二、依赖引入

在以上两个子模块的pom.xml文件中分别引入如下依赖:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <!--模板引擎依赖,即使不需要生成模板,也需要引入-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>
        <!--mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>knife4j-spring-boot-starter</artifactId>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <!--Spring Cloud Alibaba-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba.nacos</groupId>
            <artifactId>nacos-client</artifactId>
        </dependency>
        <!--Dubbo-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-dubbo</artifactId>
        </dependency>
        <!--对api的依赖-->
        <dependency>
            <groupId>com.springcloud.xxkfz</groupId>
            <artifactId>dubbo-base</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

服务生产者

一、在编写生产者服务代码之前,我们首先在dubbo-base定义一个RPC接口queryList供消费者调用。那么这个接口在哪里去实现呢?

package com.simplememory.xxkfz.service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
public interface IProviderService {

	List<String> queryList();
}


二、在product-dubbo-provider模块中创建实现类ProviderServiceImpl.java实现dubbo-base声明的queryList接口。其中@Service是Dubbo提供的注解,表示当前服务会发布成一个远程服务,不要和Spring提供的搞混哦。

package com.simplememory.xxkfz.service;

import org.apache.dubbo.config.annotation.Service;

import java.util.Arrays;
import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ProviderServiceImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:44:00
 */
@Service
public class ProviderServiceImpl implements IProviderService {


	@Override
	public List<String> queryList() {
		return Arrays.asList("欢迎关注小小开发者公众号","私信回复【源代码】可获取代码工程资源哦");
	}
}

三、在配置文件application.yml中配置数据源信息、dubbo相关配置等;完整配置信息如下:

# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8
    username: root
    password: root
  application:
    name: provider-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8050
# dubbo相关配置
dubbo:
  scan:
    # dubbo服务实现类的扫描基准包路径
    base-packages: com.simplememory.xxkfz.service
    #Dubbo服务暴露的协议配置
  protocol:
    name: dubbo
    port: 1

服务消费者

编写基本的相关代码结构

一、创建ConsumerController.java,提供查询列表数据的接口。

package com.simplememory.xxkfz.controller;

import com.simplememory.xxkfz.service.ConsumerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
@RestController
@RequestMapping("/dubbo/consumer")
public class ConsumerController {

	@Autowired
	private ConsumerService consumerService;

	@GetMapping
	public List<String> list() {
		return consumerService.list();
	}
}

二、创建ConsumerService.java

package com.simplememory.xxkfz.service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerService.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
public interface ConsumerService {


	List<String> list();

}

三、创建实现类ConsumerServiceImpl.java,并使用使用@Reference注解注入相应的service,就可以像调用本地jar包一样,调用远程服务。

package com.simplememory.xxkfz.service.impl;

import com.simplememory.xxkfz.service.ConsumerService;
import com.simplememory.xxkfz.service.IProviderService;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 公众号: SimpleMemory
 * @version 1.0.0
 * @ClassName ConsumerImpl.java
 * @Description TODO
 * @createTime 2023年02月18日 20:41:00
 */
@Service
public class ConsumerServiceImpl implements ConsumerService {

	@Reference
	private IProviderService providerService;

	@Override
	public List<String> list() {
		return providerService.queryList();
	}
}

四、在配置文件application.yml中配置基本信息,主要配置了要订阅的服务名;完整配置信息如下:

# 数据源配置
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/xk_cloud?characterEncoding=utf-8&allowMultiQueries=true&serverTimezone=GMT%2B8
    username: root
    password: root
  application:
    name: consumer-service
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
server:
  port: 8020
#dubbo配置
#要订阅的服务名,多个用,隔开
dubbo:
  cloud:
    subscribed-services: provider-service

测试

  • 启动nacos注册中心。

  • nacos注册中心启动完成后,依次启动DubboProviderMainApplication,DubboConsumerMainApplication生产者、消费者服务,可以看到Nacos服务列表里有两个服务。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tyFB7F3G-1676772812775)(SpringCloud%20Alibaba%E9%9B%86%E6%88%90Dubbo%E5%AE%9E%E7%8E%B0%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E9%97%B4%E8%B0%83%E7%94%A8.image/image-20230218215513847.png)]

  • 在浏览器地址栏访问:http://127.0.0.1:8020/dubbo/consumer

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

数值方法笔记1:数字表示与误差分析

1 有意义数位概念与有意义数位损失1.1 怎么分析误差2 逼近阶 与渐近记法3 误差传播与稳定性1 有意义数位概念与有意义数位损失 整数的二进制表示使用短除法&#xff0c;网上有很多文章&#xff0c;这里就不再过多赘述了。 提一嘴小数的二进制表示。下面列举了一个例子。 在表…

【Spark分布式内存计算框架——Spark SQL】12. External DataSource(下)rdbms 数据

6.7 rdbms 数据 回顾在SparkCore中读取MySQL表的数据通过JdbcRDD来读取的&#xff0c;在SparkSQL模块中提供对应接口&#xff0c;提供三种方式读取数据&#xff1a; 方式一&#xff1a;单分区模式 方式二&#xff1a;多分区模式&#xff0c;可以设置列的名称&#xff0c;作为…

实例三:MATLAB APP design-多项式函数拟合

一、APP 界面设计展示 注:在左侧点击数据导入,选择自己的数据表,如果数据导入成功,在右侧的空白框就会显示数据导入成功。在多项式项数右侧框中输入项数,例如2、3、4等,点击计算按钮,右侧坐标框就会显示函数图像,在平均相对误差下面的空白框显示平均相对误差。

buu [NPUCTF2020]Classical Cipher 1

题目描述&#xff1a; 题目分析&#xff1a; 首先输入密码 {gsv_pvb_rh_zgyzhs} 后&#xff0c;得到&#xff1a;可以得知密码是错误的&#xff0c;再看看密码 {gsv_pvb_rh_zgyzhs} &#xff0c;排列无序&#xff0c;那么尝试用凯撒与栅栏解密&#xff0c;发现还是解不出&…

Python基础3

目录 1. 函数多返回值 2. 函数多种传参方式 3. 匿名函数 3.1 函数作为参数传递 3.2 lambda匿名函数 4. 文件的读取操作 4.1 open&#xff08;&#xff09;打开函数 4.2 读操作方法 4.3 文件的写入 4.4 文件的追加 5. 异常的捕获方法 5.1 捕获常规异常 5.2 捕获指定…

Spring Boot + Redis 实现分布式锁

一、业务背景有些业务请求&#xff0c;属于耗时操作&#xff0c;需要加锁&#xff0c;防止后续的并发操作&#xff0c;同时对数据库的数据进行操作&#xff0c;需要避免对之前的业务造成影响。二、分析流程使用 Redis 作为分布式锁&#xff0c;将锁的状态放到 Redis 统一维护&a…

ESP32学习--基于Mircopython-01

目录 第一步-开发环境搭建 第二步&#xff1a;点亮LED灯 第三步&#xff1a;ESP32连接wifi 1. 设置工作模式 第四步&#xff1a;PC机控制ESP32LED灯 课程链接 基础01-ThonnyMicroPythonESP32环境搭建_哔哩哔哩_bilibili 第一步-开发环境搭建 软件安装---固件下载 必须…

流程引擎之Flowable简介

背景Flowable 是一个流行的轻量级的采用 Java 开发的业务流程引擎&#xff0c;通过 Flowable 流程引擎&#xff0c;我们可以部署遵循 BPMN2.0 协议的流程定义&#xff08;一般为XML文件&#xff09;文件&#xff0c;并能创建流程实例&#xff0c;查询和访问流程相关的实例与数据…

基于RK3588的嵌入式linux系统开发(五)——uboot优化修改(按任意按键停止autoboot)

我们通常情况下&#xff0c;芯片进入uboot后&#xff0c;会根据设置的bootdelay时间进行倒数计数。这时候在终端按任意键&#xff0c;即可退出autoboot&#xff0c;进入uboot的命令行模式。 官方提供的uboot源码中&#xff0c;为了防止调试串口干扰导致不能进入系统&#xff0c…

Vue3电商项目实战-分类模块5【12-二级类目-结果区-排序组件、13-二级类目-结果区-数据加载、14-二级类目-结果区-进行筛选】

文章目录12-二级类目-结果区-排序组件13-二级类目-结果区-数据加载14-二级类目-结果区-进行筛选12-二级类目-结果区-排序组件 目的&#xff1a;封装排序组件&#xff0c;完成排序切换效果 大致步骤&#xff1a; 定义一个组件 sub-sort&#xff0c;完成基础布局在 sub.vue 组件…

Java:Linux(CentOS)安装、配置及相关命令

目录一、VMware安装二、CentOS安装1、安装过程2、加载ISO2.1 桌面的设置三、VI/VIM编辑器1、一般模式2、编辑模式3、命令模式4、模式间转换四、网络配置和系统管理操作1、配置子网IP和网关2、配置虚拟机ip地址2.1 ifconfig 查询ip地址2.2 修改IP地址3、配置主机名3.1 hostname …

ChatGPT对于从业人员影响的个人浅见

文章目录前言ChatGPT简介AI简介ChatGPT对从业者的影响参考资料前言 ChatGRT最近很火&#xff0c;网上有一些观点&#xff0c;他会取代很多职业&#xff0c;让产业产生颠覆性的变化。今天聊聊自己的想法&#xff0c;他的出现&#xff0c;是否会让我&#xff08;程序员&#xff…

【opencv 系列】第3章 图像的8种变换

文章目录前言上代码1.1 复习读取和显示1.2 图像放大、缩小 cv2.resize()1.3 图像平移1.4 图像旋转1.5 图像仿射变换1.6 图像的裁剪1.7 位运算(AND, OR, XOR)1.8 图像的分离和融合1.9 颜色空间 color space前言 坦白说&#xff0c;这一章我认为是整个opencv系列最难的一张&…

Linux设备驱动模型与 sysfs实现分析

RTOS和Linux系统上开发驱动的方式非常的不同,在RTOS系统下,驱动和驱动之间并没有实质性的联系,不同的驱动和BSP之间仅仅通过一层很薄很薄的设备管理框架聚合在一起构成RTOS的设备管理子系统。图形化表示如下: 设备驱动&BSP之间互相独立,互不影响,互不依赖,独立实现,…

Damask和abaqus晶体塑性联合仿真培训通知

一 软件介绍 DAMASK 是一个统一的多物理晶体塑性模拟包。连续体力学边值问题的求解需要连接每个材料点的变形和应力的本构响应,该问题在 DAMASK 中基于晶体可塑性使用各种本构模型和均质化方法能够被有效解决。除此之外&#xff0c;孤立地处理力学已不足以研究新兴的先进高强度…

nodejs基于vue微信小程序的水库巡检系统

功能介绍 将系统权限按管理员和用户这两类涉及用户划分。 (a) 管理员&#xff1a;管理员使用本系统涉到的功能主要有&#xff1a;个人中心、用户管理、巡检管理、检查管理、反馈交流、系统管理等功能 (b)用户进入系统前台可以实现首页、我的、巡检、检查、反馈交流、地图等功能…

2019蓝桥杯真题矩阵切割(填空题) C语言/C++

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 小明有一些矩形的材料&#xff0c;他要从这些矩形材料中切割出一些正方形。 当他面对一块矩形材料时&#xff0c;他总是从中间切割一刀&#xff0c;切出一块最大的正…

「设计模式」代理模式

「设计模式」代理模式 文章目录「设计模式」代理模式一、概述二、结构三、静态代理四、 JDK动态代理五、CGLIB动态代理六、三种代理的对比优缺点使用场景一、概述 代理模式是一种应用很广泛的结构型设计模式&#xff0c;而且变化很多。在代理模式中引入了一个新的代理对象&…

面试攻略,Java 基础面试 100 问(十一)

抽象类&#xff08;abstract class&#xff09;和接口&#xff08;interface&#xff09;有什么异同? 抽象类和接口都不能够实例化&#xff0c;但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现&#xff…

JavaEE-HTTP协议完结认识HTTPS协议

目录回顾构造HTTP请求(客户端)基于 HTML和JS基于 form表单基于 ajax基于 Java基于socket认识HTTPS加密对称加密非对称加密回顾 让我们回顾一下HTTP协议中的请求和响应 构造HTTP请求(客户端) 基于 HTML和JS 基于 form表单 核心HTML标签&#xff0c;就是form标签 form ( 表单…