springcloud - 2021.0.3版本 - (一)服务注册nacos+feign

news2024/12/23 15:35:00

一,注册中心

最新版使用的是nacos,可替换为eureka,zookeeper,使用方式大同小异,这里不做扩展。

下载安装:(有机会重装时再补上)

管理页面:http://localhost:8848/nacos/index.html

二,搭建一个springcloud工程

1,创建一个maven 父工程,pom.xml如下:

<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.qi.study</groupId>
  <artifactId>springcloud</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  
  <properties>
	<java.version>18</java.version>
	<spring-boot.version>2.7.3</spring-boot.version>
	<spring-cloud.version>2021.0.3</spring-cloud.version>
	<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
  </properties>
	
  <dependencyManagement>
    <dependencies>
        <!-- spring boot 依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>${spring-boot.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- spring cloud 依赖 -->
        <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- spring cloud alibaba 依赖 -->
        <!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-alibaba-dependencies -->
        <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>
  
  <modules>
  	<module>nacos-server</module>
  	<module>app-web</module>
  	<module>app-service</module>
  </modules>
</project>

2,创建三个子工程

<module>nacos-server</module>
<module>app-web</module>
<module>app-service</module>

以nacos-server为例,添加以下配置代码

1)pom.xml

<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>
  <parent>
    <groupId>com.qi.study</groupId>
    <artifactId>springcloud</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>nacos-server</artifactId>
  
  <dependencies>
  	<dependency>
	    <groupId>org.springframework.boot</groupId>
	    <artifactId>spring-boot-starter-web</artifactId>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
	<dependency>
	    <groupId>com.alibaba.cloud</groupId>
	    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
	</dependency>

  </dependencies>
  
  <build>
	<plugins>
		<plugin>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-maven-plugin</artifactId>
		</plugin>
	</plugins>
  </build>		
</project>

2,application.yml

server:
  port: 8080

spring:
  application:
    name: nacos-server

  cloud:
    nacos:
      discovery:
        server-addr:  127.0.0.1:8848

3,Application.java

package com.qi.study.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class NacosServerApplication {

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

}

其他两个工程,app-web 和 app-service 同上面一样,只是改一下application.yml配置文件中的端口号和服务名称

#app-web
===============================================================
server:
  port: 8081

spring:
  application:
    name: app-web

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848


===============================================================

#app-service
===============================================================
server:
  port: 8082

spring:
  application:
    name: app-service

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

分别启动三个项目,在nacos服务注册中心查看是否注册成功:

三,添加feign远程接口的调用测试

1,调用过程:app-web(controller) - feignClient - app-service(controller)

2,在工程app-web中添加feign依赖包:

    <dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-openfeign</artifactId>
	</dependency>
	
	<!--引入openfeign,必须要引入loadbalancer,否则无法启动-->
	<dependency>
	    <groupId>org.springframework.cloud</groupId>
	    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
	</dependency>

3,在启动类Application.java中通过注解@EnableFeignClients开启feign功能

package com.qi.study.springcloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AppWebApplication {
	
	public static void main(String[] args) {
        SpringApplication.run(AppWebApplication.class, args);
    }
}

4,app-web 添加controller测试接口

package com.qi.study.springcloud.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.qi.study.springcloud.feignClient.AppServiceClient;

@RestController
public class HelloWorldController {

	private final static Logger LOGGER = LoggerFactory.getLogger(HelloWorldController.class);
			
	@Autowired
	private AppServiceClient appServiceClient;
	
	@GetMapping("/helloWorld")
	public String helloWorld (@RequestParam(required = false) String msg) {
		LOGGER.info("app-web 访问helloWorld接口入参: {}", msg);
		return appServiceClient.helloWorld(msg);
	}
}

app-web 添加feignclient远程调用接口,重要注解@FeignClient(value = "app-service")

package com.qi.study.springcloud.feignClient;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * 通过feign远程调用服务app-service的http接口
 * 特别注意:@FeignClient这里的value要与app-service在nacos中注册的名称一致,否则无法找到
 * @author Admin
 *
 */
@FeignClient(value = "app-service")
public interface AppServiceClient {

	@GetMapping("/hello")
    String helloWorld(@RequestParam(value = "msg", defaultValue = "world",required = false) String msg);
}

app-service 添加逻辑实现接口

package com.qi.study.springcloud.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

	private final static Logger LOGGER = LoggerFactory.getLogger(HelloController.class);
			
	@GetMapping("/hello")
    public String hello(@RequestParam(value = "msg", defaultValue = "world" ,required = false) String msg) {
		LOGGER.info("app-service访问接口hello入参: {}", msg);
		return "say hello - ".concat(msg);
	}
}

同时启动app-web和app-service,访问测试:

 5,feign还支持负载均衡,无需额外配置,保持app-service服务开启,修改端口号为8083再次启动,可以看到app-service注册的服务变为了两个

多次调用上面的测试接口就能看到两个app-service服务轮流返回数据。 

四,源代码下载:https://download.csdn.net/download/MyNoteBlog/87447400

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/342477.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ详解(二):Docker安装RabbitMQ

在Docker上安装部署RabbitMQ方便快捷&#xff0c;不需要额外安装Erlang环境&#xff0c;所以写该篇文章先来介绍如何在Docker上部署RabbitMQ。 一、安装并运行 (1)、在docker hub 中查找rabbitmq镜像 docker search rabbitmq:3.9.12-management带有“mangement”的版本&…

Python将脚本程序转变为可执行程序

Python将脚本程序转变为可执行程序 类似Java打包操作&#xff0c;若不想让人看到Python程序内部逻辑&#xff0c;也可将其转换为exe可执行文件 首先自己写一个Python程序&#xff0c;如下&#xff1a; print("start running...")listTest ["I","a…

网渗透(二十二)之Windows协议认证和密码抓取-Silver Ticket白银票据制作原理及利用方式

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

知识图谱业务落地技术推荐之国内知识图谱平台汇总(竞品)[阿里、腾讯、华为等】

各位可以参考国内知识图谱平台产品进行对技术链路搭建和产品参考提供借鉴。

2.4G-WiFi连接路由器过程

一、概述 WiFi的数据通信基于802.11协议进行&#xff0c;无线AP在工作时会定时向空中发送beacon数据包&#xff0c;基站&#xff08;STA&#xff09;从beacon中解析出AP的名称、加密方式等信息&#xff0c;从而发起连接。 二、WiFi连接路由器的详细过程 WiFi连接过程主要可以…

tomcat打debug断点调试

windows debug调试 jdk版本&#xff1a;1.8.0_181 tomcat版本&#xff1a;apache-tomcat-9.0.68.0 idea版本&#xff1a;2020.1 方法一 修改catalina.bat 在%CATALINA_HOME%\bin\catalina.bat中找到 set “JAVA_OPTS%JAVA_OPTS% -Djava.protocol.handler.pkgsorg.apache…

TIOBE 2 月编程语言榜:C++ 势不可挡

继上个月&#xff0c;C 摘得 TIOBE 2022 年度最佳编程语言奖项之后&#xff0c;其发展势头仍然保持强劲。放眼整个编程语言榜单中&#xff0c;只有 C 突破了 2 字开头的增幅&#xff0c;其同比增幅为 5.93%&#xff0c;其次便是 C 以 1.31% 的增长趋势排在第二位。 在本月 Top …

U盘文件如何恢复?u盘还原,必学的4招(2023已更新)

移动U盘是大家经常使用的存储工具&#xff0c;它可以帮助我们保存各种文件数据。在学习和工作中&#xff0c;U盘文件丢失的原因五花八门。遇到U盘文件丢失该怎么办&#xff1f;u盘格式化了怎样恢复&#xff1f;u盘还原&#xff0c;我们必须要学习的4招&#xff01; 第一招&…

如何提高短视频的播放量-4个技巧

做短视频自媒体&#xff0c;点击率是第一位&#xff0c;点击量越多&#xff0c;粉丝也就越多。可是&#xff0c;怎么才能增加短视频的点击率和提高播放量呢&#xff1f;今天就来教大家4个技巧&#xff1a; 1、蹭热点 热门话题自带流量&#xff0c;它的热度和价值&#xff0c;是…

IDEA配置部署tomcat详细步骤(maven web 和Javaweb)

目录 读者手册 一、概念与准备工作 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;准备工作 &#xff08;三&#xff09;IDEA配置tomcat服务器&#xff08;maven web项目演示&#xff09; &#xff08; 四&#xff09;Javaweb项目创建tomcat演示 读者手册 读…

ChatGPT是什么?怎么用?怎么帮我们提效?怎么基于此创业?

我花了几天时间系统的研究了ChatGPT的原理、应用、实践、以及我交流群里大家的反馈。 总结一句话&#xff1a;要么拥抱ChatGPT&#xff0c;要么被ChatGPT干掉&#xff0c;就这么简单。 ChatGpt是什么&#xff1f; ChatGPT是由OpenAI开发的&#xff0c;目前可以免费注册和使用…

一文了解 ArrayList 的扩容机制

了解 ArrayList 在 Java 中常用集合类之间的关系如下图所示&#xff1a; 从图中可以看出 ArrayList 是实现了 List 接口&#xff0c;并是一个可扩容数组&#xff08;动态数组&#xff09;&#xff0c;它的内部是基于数组实现的。它的源码定义如下&#xff1a; public class A…

漫谈广告机制设计 | 从维纳斯的七个香吻说起

情人节就要来了&#xff0c;节日快乐&#xff0c;让我们从一段浪漫的爱情故事开始。维纳斯的七个香吻-最早的广告费传说在古罗马一个小国&#xff0c;国王有一个女儿叫普绪喀&#xff0c;长得很漂亮&#xff0c;以至于被人们认为是爱神维纳斯下凡&#xff0c;而不再去供奉真正的…

DM8:DMDSC共享存储集群搭建-共享存储绑定

DM8:DMDSC共享存储集群搭建-共享存储绑定环境介绍&#xff1a;1 发现共享磁盘2 对共享存储进行分区格式化2.1 格式化成功但不可用2.2 解决问题修改错误的分区格式3 配置/etc/rc.d/rc.local3.1 编辑文件&#xff08;两个节点配置相同&#xff09;3.2 使rc.local生效4 重启操作系…

cadence SPB17.4 S032 - allegro - 保存/载入光绘层定义

文章目录cadence SPB17.4 S032 - allegro - 保存/载入光绘层定义概述保存光绘层在新板子中载入已经保存的相同类型老板子定义好的光绘层定义文件碎碎念ENDcadence SPB17.4 S032 - allegro - 保存/载入光绘层定义 概述 以前布线完成, 准备出板厂文件时, 总是要手工重新建立光绘…

如何在40岁退休?

如何在40岁退休&#xff1f; 我以前在高校工作&#xff0c;很多老师最关心一件事&#xff0c;就是何时退休。 现在有很多消息&#xff0c;官方渠道都透露&#xff0c;退休年龄将推迟&#xff0c;具体方案年底就会出台。一个人以后要工作更长的年限&#xff0c;才会退休。 表面上…

CSP Bypass-low 通关详解

1、从这里跨域看到&#xff0c;我们跨域引用外部的Js脚本&#xff0c;它会自动包含并使用 2、此时我们在另外一个web服务器上写下一个csp.html脚本&#xff0c;用来做弹窗&#xff0c;脚本内容写&#xff1a; <!DOCTYPE html> <html lang"en"> <head…

【电商开发手册】订单-下单

下单需求 所谓下单&#xff0c;本质上就是买卖双方通过确认一系列信息并且签订电子合同的过程 在电商平台的下单过程中&#xff0c;也需要确定买卖双方的一系列信息&#xff1a; 买方&#xff1a;用户确认收货地址、支付方式、配送方式等等 卖方&#xff1a;卖方需要进行供…

一文详解工业知识模型互联平台MoHub

1月8日&#xff0c;MWORKS 2023产品发布会落下帷幕。会上&#xff0c;同元软控隆重推出了云原生的工业知识模型互联平台MoHub&#xff0c;引起广泛关注。本文将从服务定位、架构方案、核心服务、持续运营等方面对MoHub平台进行全面介绍。1 MoHub平台的服务定位装备数字化的必要…

C语言学习笔记-命令行参数

在图形界面普及之前都使用命令行界面。DOS和UNIX就是例子。Linux终端提供类UNIX命令行环境。 命令行&#xff08;command line&#xff09;是在命令行环境中&#xff0c;用户为运行程序输入命令的行。命令行参数&#xff08;command-line argument&#xff09;是同一行的附加项…