[000-01-008].第02节:Consul在实际中应用

2024-08-30 15:20
文章标签 应用 02 01 008 consul 000 实际

本文主要是介绍[000-01-008].第02节:Consul在实际中应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我的后端学习大纲

SpringCloud学习大纲


1.使用Consul后,服务架构设计:

在这里插入图片描述

2.实现把支付服务provider8001注册到consul中

2.1.改POM:

 <!--SpringCloud consul discovery -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

2.2.改YML

在这里插入图片描述

2.3.改主启动类:

  • 1.添加了注解:@EnableDiscoveryClient,开启服务发现
@SpringBootApplication
@MapperScan("com.jianqun.cloud.mapper") //import tk.mybatis.spring.annotation.MapperScan;
@EnableDiscoveryClient
public class Main8001
{public static void main(String[] args){SpringApplication.run(Main8001.class,args);}
}

2.4.验证测试:

在这里插入图片描述


3.实现把订单服务80注册到consul:

3.1.改POM:

 <!--SpringCloud consul discovery -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>

3.2.改YML:

server:port: 80spring:application:name: cloud-consumer-order####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}

3.3.改主启动类

  • 1.添加了注解:@EnableDiscoveryClient,开启服务发现
@SpringBootApplication
@MapperScan("com.jianqun.cloud.mapper") //import tk.mybatis.spring.annotation.MapperScan;
@EnableDiscoveryClient
public class Main8001
{public static void main(String[] args){SpringApplication.run(Main8001.class,args);}
}

3.4.修改Controller:

  • 1.未使用consul之前:在controller层上的 public static final String PaymentSrv_URL = "http://localhost:8001";是属于写死的硬编码
    在这里插入图片描述

  • 2.使用Consul之后:我们可以把写死的ip地址改成服务的名称,即改为public static final String PaymentSrv_URL = "http://cloud-payment-service,在改成服务注册中心上的微服务名称后,无论ip地址怎么变化,就不会影响服务

@RestController
public class OrderController
{//public static final String PaymentSrv_URL = "http://localhost:8001";//先写死,硬编码public static final String PaymentSrv_URL = "http://cloud-payment-service";//服务注册中心上的微服务名称@Autowiredprivate RestTemplate restTemplate;/*** 一般情况下,通过浏览器的地址栏输入url,发送的只能是get请求* 我们模拟消费者发送get请求,but底层调用post方法,客户端消费者参数PayDTO可以不添加@RequestBody* @param payDTO* @return*/@GetMapping("/consumer/pay/add")public ResultData addOrder(PayDTO payDTO){return restTemplate.postForObject(PaymentSrv_URL + "/pay/add",payDTO,ResultData.class);}// 删除+修改操作作为家庭作业,O(∩_∩)O。。。。。。。@GetMapping("/consumer/pay/get/{id}")public ResultData getPayInfo(@PathVariable Integer id){return restTemplate.getForObject(PaymentSrv_URL + "/pay/get/"+id, ResultData.class, id);}
}

3.5.验证测试

在这里插入图片描述

4.访问接口测试:

4.1.测试地址:

  • 1.发送请求:http://localhost/consumer/pay/get/10,发现报错如下:
    在这里插入图片描述

1.原因是:consul默认是支持负载均衡的,当通过微服务的别名进行调用的时候,默认被调用的服务应该是集群版本,应该是由多个服务可以选择被调用,但是目前只有一个服务,所以就报错了;
2.要解决这个问题,就是在调用注册中心的服务的时候,添加上负载均衡注解@LoadBalanced,注解@LoadBalanced代表实现负载均衡:


4.2.配置Bean去实现负载均衡:

  • 1.这里调用服务是通过RestTemplate 实现的,所以配置注解来实现负载均衡调用
    在这里插入图片描述
@Configuration
public class ApplicationContextBean
{@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){return new RestTemplate();}
}

这篇关于[000-01-008].第02节:Consul在实际中应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121200

相关文章

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Spring AI集成DeepSeek三步搞定Java智能应用的详细过程

《SpringAI集成DeepSeek三步搞定Java智能应用的详细过程》本文介绍了如何使用SpringAI集成DeepSeek,一个国内顶尖的多模态大模型,SpringAI提供了一套统一的接口,简... 目录DeepSeek 介绍Spring AI 是什么?Spring AI 的主要功能包括1、环境准备2

Spring AI与DeepSeek实战一之快速打造智能对话应用

《SpringAI与DeepSeek实战一之快速打造智能对话应用》本文详细介绍了如何通过SpringAI框架集成DeepSeek大模型,实现普通对话和流式对话功能,步骤包括申请API-KEY、项目搭... 目录一、概述二、申请DeepSeek的API-KEY三、项目搭建3.1. 开发环境要求3.2. mav

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

Linux中Curl参数详解实践应用

《Linux中Curl参数详解实践应用》在现代网络开发和运维工作中,curl命令是一个不可或缺的工具,它是一个利用URL语法在命令行下工作的文件传输工具,支持多种协议,如HTTP、HTTPS、FTP等... 目录引言一、基础请求参数1. -X 或 --request2. -d 或 --data3. -H 或