springcloud_consume 服务消费者

2024-08-22 16:18

本文主要是介绍springcloud_consume 服务消费者,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本项目只是服务注册和发现中心的一个模块,完整项目整合请参考:https://blog.csdn.net/u012946310/article/details/81913874

一,项目结构与代码展示:

这里写图片描述
本项目为最后一个模块,服务消费者,下面直接上代码:
1,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"><modelVersion>4.0.0</modelVersion><groupId>springcloud_consume6210</groupId><artifactId>springcloud_consume6210</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><name>springcloud_consume6210</name><description>Demo project for Spring Boot</description><parent><artifactId>springcloud_demo</artifactId><groupId>springcloud_demo</groupId><version>0.0.1-SNAPSHOT</version></parent><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version><spring-cloud.version>Finchley.SR1</spring-cloud.version></properties><dependencies><dependency><groupId>springcloud_demo</groupId><artifactId>springcloud_model</artifactId><version>0.0.1-SNAPSHOT</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 整合swagger,方便接口查看 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><finalName>6210</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

2,ConsumeApplication6210 服务启动类:

package springcloud.consume;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.web.client.RestTemplate;@EnableEurekaClient // 本服务启动后会自动注册进eureka服务中
@EnableDiscoveryClient // 让服务使用eureka服务器, 实现服务注册和发现
@SpringBootApplication
public class ConsumeApplication6210 {public static void main(String[] args) {SpringApplication.run(ConsumeApplication6210.class, args);}//@Bean 应用在方法上,用来将方法返回值设为bean@Bean@LoadBalanced  //@LoadBalanced实现负载均衡public RestTemplate restTemplate() {return new RestTemplate();}// 设置@Value注解取值不到忽略(不报错)@Beanpublic static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {PropertySourcesPlaceholderConfigurer c = new PropertySourcesPlaceholderConfigurer();c.setIgnoreUnresolvablePlaceholders(true);return c;}
}

3,MySwagger2Config swagger 工具类:

package springcloud.consume.swagger;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;@Configuration
@EnableSwagger2 // 开启swagger
public class MySwagger2Config extends WebMvcConfigurerAdapter {@Beanpublic Docket createRestApi() {return new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo()).select()// 扫描指定包中的swagger注解.apis(RequestHandlerSelectors.basePackage("springcloud.consume.controller")).paths(PathSelectors.any()).build().pathMapping("/");}private ApiInfo apiInfo() {return new ApiInfoBuilder().title("基础平台 RESTful APIs").description("基础平台 RESTful 风格的接口文档,内容详细,极大的减少了前后端的沟通成本,同时确保代码与文档保持高度一致,极大的减少维护文档的时间。").version("1.0.0").build();}@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}}

4,ConsumeController 消费者控制层:

package springcloud.consume.controller;import cn.hutool.core.bean.BeanUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.client.RestTemplate;
import springcloud.service.model.User;import java.util.Map;/*** 消费端接口,像 eureka 请求需要的服务*/
@RestController
@Slf4j
@RefreshScope
@RequestMapping("/consume")
public class ConsumeController {@Autowiredprivate RestTemplate restTemplate;/*** 调用服务提供者接口名称,此接口会调用到 eureka.client.serviceUrl.defaultZone 配置的 http://192.168.2.126:6110/eureka/,http://192.168.2.131:6111/eureka/* 注册中心上面注册的 SPRINGCLOUD-SERVICE 服务提供者上面*/private String eurekaService = "http://SPRINGCLOUD-SERVICE";@Value("${source}")private String source;@Value("${name}")private String name;@ResponseBody@PostMapping("/addUser")public int addUser(User user){log.info("===============${name}=" + name);log.info("===============${source}=" + source);log.debug("===============addUser");Map map = BeanUtil.beanToMap(user);int i = restTemplate.postForObject(eurekaService + "/user/addUser/", map, Integer.class);return i;}@ResponseBody@GetMapping("/getUserById/{userId}")public User getUserById(@PathVariable("userId") Integer userId){log.info("===============${name}=" + name);log.info("===============${source}=" + source);log.debug("===============addUser");User user = restTemplate.getForObject(eurekaService + "/user/getUserById/" + userId, User.class);return user;}
}

5,application.properties 配置文件:

server.port=6210#应用(服务)名称
#spring.application.name=springcloud_consume6210 // 不可以使用下划线,改为中划线
spring.application.name=springcloud-consume6210
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://192.168.2.126:6110/eureka/,http://192.168.2.131:6111/eureka/
#自定义服务名称信息
eureka.instance.instance-id=springcloud-consume6210
#访问路径可以显示IP地址
eureka.instance.prefer-ip-address=true
#点击status状态栏时,跳转的路径
eureka.instance.status-page-url=http://localhost:6210/swagger-ui.html

6,bootstrap.properties 配置文件:

#获取远程配置
spring.cloud.config.uri=http://192.168.2.126:6310
spring.cloud.config.profile=test

注意:bootstrap.properties ,它和application.properties 文件一样,会被spring boot加载,但是bootstrap.properties 会优先加载。
这里 bootstrap.properties 文件中配置了分布式配置中心的 ip 地址和运行环境 profile,可以直接获取到分布式配置中心配置的内容,上面 UserController 里面的代码

@Value("${source}")
private String source;
@Value("${name}")
private String name;

就是获取的分布式配置中心的配置信息,仔细查看 application.properties 配置文件里面是没有配置这两个参数的。

二,启动项目并运行展示

上面的服务消费者环境搭建好后就可以运行我们的服务消费者了,消费者运行之前还需要先运行我们之前搭建的126:6110 与 131:6111 两个 eureka 注册中心和 springcloud_service6010 和 6011 两个服务提供者。

运行完服务消费者后,再次刷新 eureka 界面展示控制台
这里写图片描述
会发现我们的两个服务提供者(126:6110 与 131:6111 )和消费者(6210)分别已经注册到了 两个 eureka 注册中心,服务名称 Application 就是我们代码中 spring.application.name 所配置的服务名称,我们通过该名称来调用服务提供者。

#应用(服务)名称,如果多个服务集群,该名称应该一样
#spring.application.name=springcloud_service // 不可以使用下划线,改为中划线
spring.application.name=springcloud-service

服务提供者同样集成了 swagger 工具,现在我们点击链接跳转到 swagger 接口展示界面来调用服务提供者
这里写图片描述
通过此图可以发现,我们的服务消费者调用服务提供者已经成功,并且已经成功返回了查询的数据。
备注:由于我们在启动类中配置了 @LoadBalanced 注解

//@Bean 应用在方法上,用来将方法返回值设为bean
@Bean
@LoadBalanced  //@LoadBalanced实现负载均衡
public RestTemplate restTemplate() {return new RestTemplate();
}

所以会开启负债均衡策略,默认是轮询,会在我们配置的两台服务提供者中轮询来调用。
到这里,消费者模块就算完成了。

这篇关于springcloud_consume 服务消费者的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot基于沙箱环境实现支付宝支付教程

《SpringBoot基于沙箱环境实现支付宝支付教程》本文介绍了如何使用支付宝沙箱环境进行开发测试,包括沙箱环境的介绍、准备步骤、在SpringBoot项目中结合支付宝沙箱进行支付接口的实现与测试... 目录一、支付宝沙箱环境介绍二、沙箱环境准备2.1 注册入驻支付宝开放平台2.2 配置沙箱环境2.3 沙箱

使用Java发送邮件到QQ邮箱的完整指南

《使用Java发送邮件到QQ邮箱的完整指南》在现代软件开发中,邮件发送功能是一个常见的需求,无论是用户注册验证、密码重置,还是系统通知,邮件都是一种重要的通信方式,本文将详细介绍如何使用Java编写程... 目录引言1. 准备工作1.1 获取QQ邮箱的SMTP授权码1.2 添加JavaMail依赖2. 实现

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

java两个List的交集,并集方式

《java两个List的交集,并集方式》文章主要介绍了Java中两个List的交集和并集的处理方法,推荐使用Apache的CollectionUtils工具类,因为它简单且不会改变原有集合,同时,文章... 目录Java两个List的交集,并集方法一方法二方法三总结java两个List的交集,并集方法一

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

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

Spring AI集成DeepSeek实现流式输出的操作方法

《SpringAI集成DeepSeek实现流式输出的操作方法》本文介绍了如何在SpringBoot中使用Sse(Server-SentEvents)技术实现流式输出,后端使用SpringMVC中的S... 目录一、后端代码二、前端代码三、运行项目小天有话说题外话参考资料前面一篇文章我们实现了《Spring

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

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

Springboot的自动配置是什么及注意事项

《Springboot的自动配置是什么及注意事项》SpringBoot的自动配置(Auto-configuration)是指框架根据项目的依赖和应用程序的环境自动配置Spring应用上下文中的Bean... 目录核心概念:自动配置的关键特点:自动配置工作原理:示例:需要注意的点1.默认配置可能不适合所有场景

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

使用Apache POI在Java中实现Excel单元格的合并

《使用ApachePOI在Java中实现Excel单元格的合并》在日常工作中,Excel是一个不可或缺的工具,尤其是在处理大量数据时,本文将介绍如何使用ApachePOI库在Java中实现Excel... 目录工具类介绍工具类代码调用示例依赖配置总结在日常工作中,Excel 是一个不可或缺的工http://