Spring-boot+Dubbo(直连模式)

2023-11-19

Spring-boot+Dubbo(直连模式)Demo

这里应该有很多人会问,直连模式(什么鬼啊),一般情况下我们进行微服务开发时,都是通过zookeeper等注册中心来实现服务的提供和引用的,那直连模式没啥用啊!其实不然,直连模式大有用处,当你要验证服务是否连通或者验证服务是否成功时,直连模式可以大大节省时间,不需要每台服务器的去配zookeeper的环境了.

第一步:先搭建项目的结构

我们都知道dubbo是rpc框架,他是由服务提供者,服务消费者及注册中心组成一个最基本的结构,所以我们需要3个模块(因为我们采用直连,所以注册中心可以略过)

首先:idea中File -> new -> project -> Spring Initializr -> next -> Group+Artifact -> next…一直next下去即可,好了一个工程的外壳算是好了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后添加另外3个模块

第一个模块:provider

选中刚建的项目工程,右键 -> new -> module(模块) -> Spring Initializr -> next Group+Artifact -> next…一直next下去即可,一个provider模块就搭建好了

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

第二个模块:consumer,与provider一致,这里便不再阐述,注:Artifact名称需要更改成consumer

第三个模块:api,与上述一致,不在阐述

why?,想必很多人都有疑问吧,第三个模块不是应该注册中心(registry)吗?因为我们采用直连模式,所以这里不需要注册中心,否则是4个模块,而api是干嘛的呢?这里名字随意,我只是根据他的功能取得名字,为了让功能更清晰,更好的解耦合,我把接口和一些common类(共用的方法)都放在api中.

附上我的项目结构图

在这里插入图片描述

第二步:开始撸代码

首先:引入需要的依赖

api:只做接口和common类提供模块,所以不需要任何依赖

provider:作为服务提供者,需要dubbo相关的依赖及接口api的依赖

<!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.7.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.dubbo/dubbo-spring-boot-starter -->
        <dependency>
            <groupId>org.apache.dubbo</groupId>
            <artifactId>dubbo-spring-boot-starter</artifactId>
            <version>2.7.1</version>
        </dependency>
        <dependency>
            <groupId>com.hongsi.study</groupId>
            <artifactId>api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

consumer:作为服务消费者,与provider一致

然后:在api中编写接口

接口-HelloWorld

package com.hongsi.study.api.service;

/**
 * @author mjs
 * @date 2019-11-26 17:38:00
 * @des 服务提供接口
 */
public interface HelloWorld {
    /**
     * sayHello
     * @param message
     * @return
     */
    String sayHello(String message);
}

  • provider中编写接口实现类,启动类及dubbo配置

接口实现类-HelloWorldImpl,注意@Service要用dubbo提供的

package com.hongsi.study.provider.serviceimpl;

import com.hongsi.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.stereotype.Component;

/**
 * @author mjs
 * @date 2019-11-26 17:40:06
 * @des 接口实现
 */
@Component   //@Component注解用来注册bean
@Service     //@Service注意要用dubbo的,不要jdk的,用来注册服务的
public class HelloWorldImpl implements HelloWorld {
    /**
     * 重写sayHello方法
     * @param message
     * @return
     */
    @Override
    public String sayHello(String message) {
        return "api-sayHello:"+message;
    }
}

provider的dubbo配置

application.properties文件的编写(.yml文件也可)

dubbo.registry.address=N/A 
dubbo.application.name=provider
dubbo.scan.base-packages=com.t3go.study.provider.serviceimpl

第一行的配置指:不使用注册中心

第二行的配置指:给当前的dubbo应用取个名字,便于识别

第三行的配置指:扫描带@Service注解的包

provider的启动类编写(注意:在dubbo中配置过了包扫描,这里可以不加@DubboComponentScan)

package com.hongsi.study.provider;

import org.apache.dubbo.config.spring.context.annotation.DubboComponentScan;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Component;
@DubboComponentScan(basePackages = "com.hongsi.study.provider.serviceimpl")
@EnableDubboConfig
@SpringBootApplication
public class ProviderApplication {

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

}

在consumer中编写测试方法,启动类及dubbo配置

测试方法-HelloController,注意这里引用bean要用@Refence(订阅服务)

package com.hongsi.study.consumer.controller;


import com.t3go.study.api.service.HelloWorld;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.stereotype.Controller;

/**
 * @author mjs
 * @date 2019-11-26 17:54:00
 * @des 测试服务是否成功
 */
@Controller
public class HelloController {
    /**
     * url:因为没有注册中心所以,消费者这里直接连接到服务提供者,
     * dubbo默认端口号为20880,可在服务提供者配置文件中修改
     */
    @Reference(url = "dubbo://localhost:20880")
    private HelloWorld helloWorld;

    public void HelloWorld(String message){
       System.out.println(helloWorld.sayHello(message));
    }
}

consumer的dubbo配置

dubbo.application.name=consumer

consumer的启动类编写

package com.t3go.study.consumer;

import com.t3go.study.consumer.controller.HelloController;
import org.apache.dubbo.config.spring.context.annotation.EnableDubboConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

@EnableDubboConfig
@SpringBootApplication
public class ConsumerApplication {

    public static void main(String[] args) {
        ConfigurableApplicationContext cac =
        SpringApplication.run(ConsumerApplication.class, args);     //获得springboot的容器,和spring差不多
        HelloController qsc = (HelloController)cac.getBean("helloController");
        qsc.HelloWorld("应该成功了吧!");
    }

}

第三步:测试

依次启动provider,consumer中的启动类.如下图,成功

provider

在这里插入图片描述

consumer

在这里插入图片描述

恭喜你,直连成功!!!

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring-boot+Dubbo(直连模式) 的相关文章

随机推荐

  • 小记MAC安装GIT

    MAC安装GIT教程 0 安装方式说明 MAC安装软件的时候 有一个很好用的工具 叫 homebrew 大家可以试一下 我这里采用下载安装包的方式进行 1 下载git 我这里就暂且选择git最新版本 2 36 1 正常情况下 我们一般不选择
  • 经典的笔试题解析《高质量C/C++编程》

    对于 高质量C C 编程 想必这个已经是早已成名的经典书籍了 在此 笔者借用两三个题目 解析下面代码 错误示列 请勿模仿 正确的代码 在后面部分 include
  • 快排 + 二分

    一直觉得快排跟二分很像 大家也都有很多变种 在此整理一下 快排的特点是 需要一个pivort 让左边比他大 右边比他小 反之亦然 每次排序都有一个数的位置被确定 两种写法其实是一种 经典partition写在一个函数里 class Solu
  • Flutter BottomNavigationBar组件(底部导航栏)

    Flutter BottomNavigationBar 组件 BottomNavigationBar 常见的属性 属性名 说明 items List 底部导航条按钮集合 页面集合 iconSize icon currentIndex 默认选
  • 单相逆变器第二课、DC/AC电路基础理论学习

    这周是真心忙 到现在才把DC AC单相部分的理论知识看完 但由于是第一次接触电力电子 写的不好的地方 大家轻喷 DC AC变换电路成为逆变 也就是直流电压 电流 向交流电压 电流 变化 先来看下电压型逆变器 电压型逆变器主要有三类 电阻负载
  • 90 后学霸博士 8 年进击战:用机器学习为化工研究叠 BUFF

    本文首发自微信公众号 HyperAI超神经 内容一览 ScienceAI 作为近两年的技术热点 引起了业界广泛关注和讨论 本文将围绕 ScienceAdvances 的一篇论文 介绍如何利用机器学习 对燃煤电厂的胺排放量进行预测 关键词 A
  • 简短的 mouseover 显示与隐藏层的办法

    简短的 mouseover 显示与隐藏层的办法 在制作 mouseover 和 mouseout 显示 隐藏层的时候 有时总会出现 mouseover 层里面的对象时 层消失的情况 这是因为mouseover 层内 对象时 会对前层产生两个
  • 从零开始学习OpenWrt完美教程

    Cisco Linksys在2003年发布了WRT54G这款无线路由器 同年有人发现它的IOS是基于Linux的 然而Linux是基于GPL许可证发布的 按照该许可证Cisco应该把WRT54G 的IOS的源代码公开 2003年3月 Cis
  • ASP.NET Core项目无法使用命令行执行ef命令

    在项目目录下 打开命令行窗口 执行dotnet ef help 提示以下信息 报错信息 无法执行 因为找不到指定的命令或文件 可能的原因包括 你拼错了内置的 dotnet 命令 你打算执行 NET Core 程序 但 dotnet ef 不
  • mv:重命名和移动文件、文件夹

    在Linux中 mv命令可以用于重命名和移动文件 也可以用于重命名和移动文件夹 注意 如果目标目录已经存在同名的文件或文件夹 mv命令将覆盖目标文件或合并目标文件夹 请注意 在使用mv命令时要小心 确保提供正确的文件名和路径 以免误操作造成
  • 这样的程序员年薪可以达到多少呢?

    转载于 https www cnblogs com Rainbow890722 p 10456640 html
  • 美媒体称谷歌卫星技术可实时定位全球军舰

    5月17日 美国 AOL防务 网站刊登文章 称谷歌公司将推出一款新软件 可让用户对任何一艘海上船只进行实时追踪定位并了解水深数据 包括美海军军舰 做了美军做不到的事 据悉 谷歌公司耗资数百万美元发展能够精确定位船只方位并搜集水深数据的卫星技
  • Redis 跳跃表

    跳跃表 跳跃表基础知识 跳跃表 网易公开课 gt 跳跃表 总结 效率堪比各种平衡树结构 如红黑树 B树 B 树 实现起来简单 仅用到链表的知识 基于概率论 有个随机过程 但表现不错
  • 神经网络优化(损失函数:自定义损失函数、交叉熵、softmax())

    参考 神经网络优化 损失函数 自定义损失函数 交叉熵 softmax 云 社区 腾讯云 1 前向传播 搭建网络结构 反向传播 训练网络参数 2 激活函数 提高了模型的表达里 使模型更具有表达力 3 神经网络的层数 通常用神经网络的层数和神经
  • 区块链应用技术学习(一)

    众所周知 区块链技术的特性就在于其去中心化与不可篡改性 由于这俩点的特性的存在 使得区块链技术的发展颇有看头 于是小编我也踏上了区块链学习的过程 文章目录 前言 一 区块链是什么 二 区块链作用 1 企业 2 个人 总结 前言 在学习区块链
  • Android资源管理中的SharedLibrary和Dynamic Reference-------之资源共享库(一)

    一 引言 共享库的概念 相信大家都有所了解 它有有许多优点 可以设想 在一个系统上要跑100个应用 并且它们都使用到了同一个库 如果这个库做成静态库 那么每个应用中都要打包一次这个库 100个应用就是100次 这无疑是重复的 我们可不可以在
  • FIFO读写控制

    如果在两个模块之间传输数据 两个模块之间的处理速率不同 会导致采集数据的遗漏或错误 在他们之间加一个数据缓存器 所有数据先经过缓存器缓存 再输入数据接送模块 创建两个模块 一个 作为发送模块 一个作为接受模块 发送模块检测到 fifo为空开
  • Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。

    网页转换成PDF 1 引言 2 代码实战 2 1 模块介绍 2 1 1 pdfkit 2 2 安装 2 3 代码实例 2 3 1 URL 对应网页转 PDF 2 3 2 HTML 文件转 PDF 2 3 3 字符串转 PDF 2 4 拓展
  • C++中protected访问权限问题

    今天发现有这样两句话 1 基类的保护成员对于派生类的成员是可访问的 2 派生类的成员只能通过派生类对象访问基类的保护成员 派生类对一个基类对象中的受保护成员没有访问权限 这两句话看的太头晕了 其实作者应该是想表达 只有在派生类中才可以通过派
  • Spring-boot+Dubbo(直连模式)

    Spring boot Dubbo 直连模式 Demo 这里应该有很多人会问 直连模式 什么鬼啊 一般情况下我们进行微服务开发时 都是通过zookeeper等注册中心来实现服务的提供和引用的 那直连模式没啥用啊 其实不然 直连模式大有用处