热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建SpringCloud微服务框架:二、SpringCloud服务注册与发现

搭建微服务框架(SC服务注册与发现)本文源地址:https:yanzhenyidai.com#squidsquid-2.1-sc-serverGithub地址:SQuid服务注册中

搭建微服务框架(SC服务注册与发现)

本文源地址:https://yanzhenyidai.com/#/squid/squid-2.1-sc-server



Github地址:SQuid





服务注册中心-Nacos

Nacos是阿里开源的一款注册中心中间件,详细介绍可以访问Nacos官网,本次框架是基于Nacos做的注册。

安装Nacos我们可以使用Docker,Docker可以很快的安装好Nacos并且启动。

而在本项目中,引入的Nacos两个依赖分别如下:


com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery

完成对Nacos的依赖引入后,可以进行下一步的SpringCloud服务发布的操作,??。




SpringCloud服务发布

我们新建俩个Maven模块项目,用它来实现服务提供者的角色。

技术图片

如上,分别以 squid-example-apisquid-example-provider 命名。



  • squid-example-api

squid-example-api 项目中主要是写一些接口文件,将这些接口对外注册并且暴露出去,引入依赖:


org.springframework.cloud
spring-cloud-starter-openfeign

新建一个 HiService 的接口,并且注明 @FeignClient("squid-example-sc-provider"),注解内名称可以为项目名:

@FeignClient("squid-example-sc-provider")
public interface HiService {

@RequestMapping(value = "/hi", method = RequestMethod.GET)
public String hi(@RequestParam("msg") String msg);
}

PS:这里是为了明确各个模块,所以将 squid-example-apisquid-example-provider 进行分离,也可以将两个模块合并。



  • squid-example-provider

然后我们依旧是在 squid-example-provider 引入依赖:


org.springframework.cloud
spring-cloud-starter-openfeign


org.springframework.boot
spring-boot-starter-web



com.yanzhenyidai
squid-example-sc-api
1.0-SNAPSHOT

引入 spring-cloud-start-openfeign 是将服务以 Http Restful 的形式进行对外发布(SC的服务基本上都是以Http Restful的形式,
可以了解一下 Dubbo或者其他RPC的服务注册,也可以看一下 RPC和HTTP),而 spring-boot-starter-web 则是表明该项目需要以Web的形式进行启动,
不难理解,毕竟HTTP请求是有需要一个Web容器来进行。

一切准备就绪后,我们就可以开始来编写服务实现和启动服务类了。

在项目中最外层的包路径中新建一个 Application 的启动类,这点原因熟悉Spring加载逻辑的同学应该都明白,Spring启动扫描时是向下扫描,也就是加载包路径以下的
代码配置:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@RestController
public class ScProviderApplication {

@Autowired
private HiService hiService;

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


@GetMapping(value = "/hi")
public String hi(String msg) {
return hiService.hi(msg);
}
}

继续编写一个 HiService 的实现 HiServiceImpl

@Service
public class HiServiceImpl implements HiService {

@Override
public String hi(String msg) {
return "hi sc," + msg;
}
}

贴一下 application.yaml 文件信息:

spring:
application:
name: squid-example-sc-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
discovery:
client:
health-indicator:
enabled: false
server:
port: 8084
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000

接下来就可以在 Application 类中直接启动了。

没有报错的话,可以访问以下路径 localhost:8084/hi?msg=Hi,以检验服务是否发布成功。

也可以在Nacos控制台中直观的找到该服务的信息:

技术图片

一切都OK了,继续下一步??。




SpringCloud服务订阅

服务可以正常注册之后,我们来新建一个工程模拟消费者进行请求,如下图:

技术图片

新建的工程我们以 squid-example-consumer 来命名,来对应 squid-example-provider 的意思。

照样,我们需要引入依赖:


org.springframework.cloud
spring-cloud-starter-openfeign


org.springframework.boot
spring-boot-starter-web



com.yanzhenyidai
squid-example-sc-api
1.0-SNAPSHOT

依赖与 squid-example-provider 一致,紧接着,我们可以来编写调用 squid-example-provider 对外暴露的 HiService 接口,同样新建一个 Application
的启动类:

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@RestController
public class ScConsumerApplication {

@Autowired
private HiService hiService;

@GetMapping(value = "/hi")
public String hi(String msg) {
return hiService.hi(msg);
}

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

application.yaml 文件:

spring:
application:
name: squid-example-sc-provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
discovery:
client:
health-indicator:
enabled: false
server:
port: 8085
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000

启动 squid-example-consumerApplication后,我们可以访问 localhost:8085/hi?msg=Hi 来进行验证,此时如果先打端点在 squid-example-providerHiServiceImpl 方法实现上,可以看到程序进入到了该断点。

虽然本意上 squid-example-consumber 工程是多此一举,毕竟现在项目大多都是前后端分离,不过通过这个消费工程也可以明白到Nacos是怎么做到的服务发现,以及如果内部服务需要相互调用,也可以这样进行。

PS:Nacos的服务发现:

技术图片

上图是Nacos官网的基础机构及概念图,大致看上去逻辑和Zookeeper的调用机制类似。服务先将关键信息注册到Nacos,调用时根据协议再去请求各个服务。这里不做多提,感兴趣可以下Zookeeper服务注册和发现。




总结

SpringCloud作为近期很火的微服务框架,本篇记录的是个人搭建SpringCloud服务的一些记录,感谢您的阅读,希望能帮助到你,如果有遇到问题,可以发送邮件到frank-tan@outlook.com。

参考资料:


SpringCloud(IO)
SpringCloud(GITHUB)


搭建SpringCloud微服务框架:二、SpringCloud服务注册与发现



推荐阅读
  • 在最近的项目中,我们广泛使用了Qt框架的网络库,过程中遇到了一些挑战和问题。本文旨在记录这些经验和解决方案,以便日后参考。鉴于我们的客户端GUI完全基于Qt开发,我们期望利用其强大的网络功能进行Fiddler网络数据包的捕获与分析,以提升开发效率和应用性能。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • Nginx 反向代理配置与应用指南
    本文详细介绍了 Nginx 反向代理的配置与应用方法。首先,用户可以从官方下载页面(http://nginx.org/en/download.html)获取最新稳定版 Nginx,推荐使用 1.14.2 版本。下载并解压后,通过双击 `nginx.exe` 文件启动 Nginx 服务。文章进一步探讨了反向代理的基本原理及其在实际应用场景中的配置技巧,包括负载均衡、缓存管理和安全设置等,为用户提供了一套全面的实践指南。 ... [详细]
  • 在 Mac 上查看隐藏文件和文件夹的详细指南。通过终端命令,您可以轻松地显示或隐藏这些文件。具体步骤如下:输入 `defaults write com.apple.finder AppleShowAllFiles -bool true` 以显示所有隐藏文件,或使用 `defaults write com.apple.finder AppleShowAllFiles -bool false` 以重新隐藏它们。此方法适用于各种版本的 macOS,帮助用户更好地管理和访问系统文件。 ... [详细]
  • 本文详细解析了逻辑运算符“与”(&&)和“或”(||)在编程中的应用。通过具体示例,如 `[dehua@teacher~]$[$(id -u) -eq 0] && echo "You are root" || echo "You must be root"`,展示了如何利用这些运算符进行条件判断和命令执行。此外,文章还探讨了这些运算符在不同编程语言中的实现和最佳实践,帮助读者更好地理解和运用逻辑运算符。 ... [详细]
  • 二分查找算法详解与应用分析:本文深入探讨了二分查找算法的实现细节及其在实际问题中的应用。通过定义 `binary_search` 函数,详细介绍了算法的逻辑流程,包括初始化上下界、循环条件以及中间值的计算方法。此外,还讨论了该算法的时间复杂度和空间复杂度,并提供了多个应用场景示例,帮助读者更好地理解和掌握这一高效查找技术。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践
    蚂蚁课堂:性能测试工具深度解析——JMeter应用与实践 ... [详细]
  • 近日,我在处理一个复杂的前端问题时遇到了极大困扰。具体来说,我之前开发了一个功能丰富的纯jQuery代码的前端GridView控件,实现了多种功能和视觉效果,并在多个项目中表现良好。然而,最近在尝试应用 `border-box` 布局模式时,却遇到了意想不到的兼容性和性能问题。这提醒我们在条件尚未完全成熟的情况下,应谨慎使用 `border-box` 布局模式,以免引入不必要的复杂性和潜在的bug。 ... [详细]
  • 题目 E. DeadLee:思维导图与拓扑结构的深度解析问题描述:给定 n 种食物,每种食物的数量由 wi 表示。同时,有 m 位朋友,每位朋友喜欢两种特定的食物 x 和 y。目标是通过合理分配食物,使尽可能多的朋友感到满意。本文将通过思维导图和拓扑排序的方法,对这一问题进行深入分析和求解。 ... [详细]
  • 深入解析Linux内核中的进程上下文切换机制
    在现代操作系统中,进程作为核心概念之一,负责管理和分配系统资源,如CPU和内存。深入了解Linux内核中的进程上下文切换机制,需要首先明确进程与程序的区别。进程是一个动态的执行流,而程序则是静态的数据和指令集合。进程上下文切换涉及保存当前进程的状态信息,并加载下一个进程的状态,以实现多任务处理。这一过程不仅影响系统的性能,还关系到资源的有效利用。通过分析Linux内核中的具体实现,可以更好地理解其背后的原理和技术细节。 ... [详细]
  • 如何在PDF文档中添加新的文本内容?
    在处理PDF文件时,有时需要向其中添加新的文本内容。这是否可以直接实现呢?有哪些简便且免费的方法可供选择?使用极速PDF阅读器打开文档后,可以通过点击左上角的“注释”按钮切换到注释模式,并选择相应的工具进行编辑。此外,还可以利用其他功能丰富的PDF编辑软件,如Adobe Acrobat DC或Foxit PhantomPDF,它们提供了更多高级的编辑选项,能够满足更复杂的需求。 ... [详细]
  • 题目要求解决一个有趣的编程挑战,即计算由四个自然数 \( p, q, r, s \) 组成的分数序列的和。具体来说,需要编写一个 C# 程序来处理这些自然数,并通过特定的数学运算得出最终结果。该任务不仅考验编程技能,还涉及对数学公式的理解和应用。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
author-avatar
_陈灵宝互粉号2
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有