nacos(四): 创建第一个消费者Conumer(单体)
接上一篇《nacos(三): 创建第一个生产者producer(单体)》,我们这一篇实现单体的消费者功能,准备与上一次的生产者集成在一个单体项目中。
消费者的本质其实就是向nacos注册后,通过负载均衡组件LoadBalancer获取服务地址,并通过OpenFeign或者RestTemplate等方式调用生产者提供的服务。在本次实验中,使用LoadBalancer+RestTemplate进行服务调用。
创建消费者一般需要以下步骤:
步骤一:
添加spring-cloud-starter-alibaba-nacos-discovery依赖,向nacos注册自己。这一步和创建生产者的步骤一致,不再赘述。
步骤二:
在pom.xml中引入LoadBalancer(这个过程中,还是要注意版本的匹配):
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.nacos</groupId>
<artifactId>springboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot</name>
<description>Demo project for Spring Boot</description>
<packaging>jar</packaging>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.7.6</spring-boot.version>
<spring-cloud-alibaba.version>2021.0.5.0</spring-cloud-alibaba.version>
</properties>
<dependencies>
<!--springboot-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!-- 服务发现(生产者) -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> <!--消费者-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
<version>3.1.5</version>
</dependency> <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${spring-boot.version}</version>
<configuration>
<mainClass>com.nacos.springboot.SpringbootApplication</mainClass>
<skip>false</skip>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build> </project>
步骤三:
在application.yml中,开启LoadBalancer:
server:
port: 8085 spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
username: nacos
password: nacos
config:
server-addr: 127.0.0.1:8848
file-extension: properties
username: nacos
password: nacos
loadbalancer:
nacos:
enabled: true application:
name: product1
如果没有在配置文件中开启,用服务名调用生产者的服务时,URL会解析不出来,报UnknownHostException。
步骤四:
添加RestTemplate的配置类
@Component
public class BeanManageConfig { @Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
其中@LoadBalanced注解上创建出来的RestTemplate具备负载均衡的能力。
到了这一步,消费者的配置已经都准备好了。下一个步骤就是尝试调用生产者服务,确认是否可以调用成功。
步骤五:
在项目中创建一个Controller,尝试调用服务:
@RestController
public class Consumer { @Autowired
private DiscoveryClient discoveryClient; @Autowired
private RestTemplate restTemplate; @RequestMapping("/c/echo")
public String echo(){
String url = "http://product1/hello/";
System.out.println(url);
ResponseEntity<String> forEntity = this.restTemplate.getForEntity(url, String.class);
return forEntity.getBody();
} @RequestMapping("/c/services")
public String serviceslist(){
List<ServiceInstance> instances = discoveryClient.getInstances("product1");
if (instances != null && !instances.isEmpty()) {
for(ServiceInstance s:instances){
System.out.println(s.getHost()+":"+s.getPort());
}
return "Service found!";
} else {
return "Service not found!";
}
}
}
在这段代码中,echo()方法里调用了名为product1的生产者的服务;servicelist()方法测试product1服务是否可以获取到,并输出获取到的可用地址。
单体消费者的创建与配置到这里就结束了,关于RestTemplate的深入运用将在之后的文章中慢慢探讨。下一篇将会介绍如何操作nacos中的配置项,并定时同步远程最新配置项方法。
nacos(四): 创建第一个消费者Conumer(单体)的更多相关文章
- Azure DevOps (四) 创建第一条流水线
前几篇文章,我们记录了一下azure代码仓库的使用,这篇开始,我们来搞一下azure的流水线. 流水线这个东西我觉得是devops中对于开发人员的灵魂组件,只要我们配置好了一次,剩下的所有部署都是自动 ...
- BI之SSAS完整实战教程3 -- 创建第一个多维数据集
上一篇我们已经完成了数据源的准备工作,现在我们就开始动手,创建第一个多维数据集(Cube). 文章提纲 使用多维数据集向导创建多维数据集 总结Cube设计器简介 维度细化 总结 一.使用向导创建多维数 ...
- 【C语言探索之旅】 第一部分第四课第一章:变量的世界之内存那档事
内容简介 1.课程大纲 2.第一部分第四课第一章:变量的世界之内存那档事 3.第一部分第四课第二章预告:变量的世界之声明变量 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答 ...
- 2、Arx二次开发创建第一个应用程序
一.本节课程 Arx二次开发创建第一个应用程序 二.本节要讲解的知识点 1.手动创建ARX的应用的步骤. 2.应用向导创建ARX应用程序的步骤. 三.具体内容 1.需求:创建一个Hello World ...
- Ionic学习记录(一):ionic及cordova安装、创建第一个应用、项目结构
目录: 一.ionic的安装 二.创建第一个应用程序 三.浏览器中预览应用 四.项目结构 五.添加页面 一.ionic的安装 使用Ionic创建和开发应用程序主要通过Ionic命令行实用程序(“CLI ...
- 吴裕雄--天生自然Django框架开发笔记:Django 创建第一个项目
Django 管理工具 安装 Django 之后,您现在应该已经有了可用的管理工具 django-admin.可以使用 django-admin 来创建一个项目: 可以来看下django-admin ...
- Django创建第一个应用App(3)
创建一个投票的应用app.现在已经创建好了一个项目,就是有了一个框架,有了框架之后就可以往框架里面填写一些自己的需求,就是放一些功能在里面即可.一个项目可以包含多个应用app,一个应用app可以属于多 ...
- ASP.NET MVC 5 03 - 安装MVC5并创建第一个应用程序
不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小 ...
- 《学习OpenCV》练习题第四章第一题b&c
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
- 《学习OpenCV》练习题第四章第一题a
#include <highgui.h> #include <cv.h> #pragma comment (lib,"opencv_calib3d231d.lib&q ...
随机推荐
- MongoDB备份脚本
#!/bin/bash #backup MongoDB #mongodump命令路径 DUMP=/home/mongodb/bin/mongodump #临时备份目录 OUT_DIR=/home/mo ...
- 设置Docker的默认文件存储位置
对于windows下,直接修改docker desktop界面的配置项目.对于rocky linux下面,对应的配置文件存储在: vim /etc/docker/daemon.json 文件可以配置镜 ...
- 2024年1月Java项目开发指南16:用户自由选择字段查询、是否模糊查询
我们希望用户可以自己控制是否要模糊查询 用户可以自由的选择字段去查询. 如上图,我在前端页面准备了 多选框:决定是否模糊查询.(True or False) 下拉选择框:决定要查询关键词的所属字段 输 ...
- 【人工智能】【Python】Numpy基础
Numpy 目录 Numpy Numpy简介 ndarray与原生Python List运算效率对比 N阶数组 ndarray (1)创建数组 (2)生成数组 生成纯1数组 生成纯0数组 从现有数组生 ...
- 【数据库】【MySQL】创建数据库、数据表、修改数据表字段的一些基本操作
这是一份作业,仅此而已. 代码仅供参考. # 创建数据库yggl_mllt9920 CREATE DATABASE yggl_mllt9920; # 选择数据库 USE yggl_mllt9920; ...
- kafka各个版本的特性
1. kafka-0.8.2 新特性 1.1 异步发送 producer不再区分同步(sync)和异步方式(async),所有的请求以异步方式发送,这样提升了客户端效率.producer请求会返回一个 ...
- maven maven-surefire-plugin的乱码问题
今天项目中出现奇怪问题,在eclipse中直接运行TestNG时,全部都OK,但是执行mvn test时却失败.观察其输出日志,发现有乱码,怀疑是乱码导致. 最终在官网发现蛛丝马迹. maven-su ...
- Qt/C++音视频开发80-ffmpeg实现srt推拉流/实时性非常好/音视频同步/支持格式众多
一.前言 目前互联网上的视频直播有两种,一种是基于RTMP协议的直播,这种直播方式上行推流使用RTMP协议,下行播放使用RTMP,HTTP+FLV或者HLS,直播延时一般大于3秒,广泛应用秀场.游戏. ...
- axios简易封装
import axios from 'axios' import qs from 'qs' const rootUrl = "http://localhost:5139/Dev/" ...
- vue3.0实现炫酷的随机验证码功能
先上图 接下来楼一眼实现代码 这里说明一下,我用到了vue3.0,vant3.0以及阿里图标,vant 很人性化针对vue3.0新出了个vant3.0版本,阿里则是适配vue3.0的.我们将verif ...