Nacos服务配置与注册,openFeign服务调用

1.Nacos下载运行

  1.1 Github地址 Tags · alibaba/nacos · GitHub

  目前最新版本是2.2.3,这里下载2.2.2 Release 2.2.2 (Apr 11, 2023) · alibaba/nacos · GitHub

Nacos服务配置与注册,openFeign服务调用_第1张图片

  Windows下载zip包,Linux下载gz包。

Nacos服务配置与注册,openFeign服务调用_第2张图片

  1.2 解压nacos-server-2.2.2.zip包,然后进入到bin目录,终端运行命令 startup.cmd -m standalone,即可启动服务。

Nacos服务配置与注册,openFeign服务调用_第3张图片

  注意:JAVA_HOME需要先配置好,startup.cmd脚本里会用到

  1.3 在浏览器访问http://localhost:8848/nacos,就可以打开Nacos管理界面了,不再需要用户名和密码。默认端口是8848,如果要修改端口或其它配置,可以修改conf目录(bin目录同级)下的application.properties。

2. Springboot(生产者)

  2.1 生成2.7版本Springboot Spring Initializr

Nacos服务配置与注册,openFeign服务调用_第4张图片

  2.2 修改pom文件,主要是增加三个依赖,版本号是2021.0.5



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



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



org.springframework.cloud
spring-cloud-starter-bootstrap



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.7.12
		 
	
	com.example
	demo
	0.0.1-SNAPSHOT
	demo
	Demo project for Spring Boot
	
		11
		2021.0.5
		2021.0.5.0
	
	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-devtools
			runtime
			true
		
		
			org.projectlombok
			lombok
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			com.alibaba.cloud
			spring-cloud-starter-alibaba-nacos-config
		
		
		
			com.alibaba.cloud
			spring-cloud-starter-alibaba-nacos-discovery
		
		
		
			org.springframework.cloud
			spring-cloud-starter-bootstrap
		
	

	
		
		
			org.springframework.cloud
			spring-cloud-dependencies
			${spring-cloud-dependencies.version}
			pom
			import
		
		
		
			com.alibaba.cloud
			spring-cloud-alibaba-dependencies
			${spring-cloud-alibaba-dependencies.version}
			pom
			import
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					
						
							org.projectlombok
							lombok
						
					
				
			
		
	


  2.3 在Nacos页面,新建新的命名空间test,自动生成命名空间ID

Nacos服务配置与注册,openFeign服务调用_第5张图片

  2.4 配置bootstrap.properties,bootstrap的优先级大于application

spring.application.name=mytest2
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=80d30c50-4f49-411c-8157-5bc514d7b1b0
spring.cloud.nacos.config.file-extension=properties

   注意:nacos.config的相关配置需放在这里,否则后面运行时,控制器类因为没有读到Nacos上配置而报错Error creating bean。application.name必须有,namespace对应2.3里test的命名空间ID,file-extension也可以是yaml。

  2.5 配置application.properties

server.port=8088
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=80d30c50-4f49-411c-8157-5bc514d7b1b0
spring.cloud.nacos.discovery.register-enabled=true

  nacos.discovery的配置也可以放在bootstrap.properties

  2.6 开启服务注册发现加注解@EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
public class DemoApplication {

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

}

  2.7 增加生产者控制器类

package com.example.demo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope // Spring Cloud原生注解 开启自动更新
@RequestMapping(value = "/producer")
@Slf4j
public class ProducerController {

    @Value("${config.info}")
    private String name;

    @GetMapping("/getConfig")
    public String getConfig() {
        log.info("getConfig>>>>>>>>>>>");
        return "getConfig>>>>>>>>>>>>" + "发现:" + ">>>服务名称:" + name;
    }

}

  2.8 在Nacos页面,创建新的配置mytest2.properties

  Data ID的格式:${prefix}-${spring.profiles.active}.${file-extension}

  prefix 默认为spring.application.name的值,也可以通过spring.cloud.nacos.config.prefix来配置。

spring.profiles.active为当前环境对应的profile,若为空,则格式变为${prefix}.${file-extension}。

file-extension 通过spring.cloud.nacos.config.file-extension来配置。

   本例我们没有配spring.profiles.active,所以Data ID名称应为mytest2.properties。

Nacos服务配置与注册,openFeign服务调用_第6张图片

 创建后可以在配置列表查看和编辑。Nacos服务配置与注册,openFeign服务调用_第7张图片

 2.9 启动Springboot服务,访问 http://localhost:8088/producer/getConfig, 返回结果如下

getConfig>>>>>>>>>>>>发现:>>>服务名称:我的服务

在Nacos页面,修改mytest2.properties里的config.info=我的新服务,保存发布后再次访问http://localhost:8088/producer/getConfig,返回结果如下

getConfig>>>>>>>>>>>>发现:>>>服务名称:我的新服务

由此借助Nacos实现不重启Springboot服务,而读取到新的配置信息。

 2.10 在Nacos页面,服务列表里可以找到服务mytest2

Nacos服务配置与注册,openFeign服务调用_第8张图片

3. Springboot(消费者)

  3.1 Copy一份2.1生成的Springboot初始代码,做消费端

  3.2 修改pom文件,主要是服务发现,Openfeign和LoadBalancer三个依赖



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



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



org.springframework.cloud
spring-cloud-starter-loadbalancer



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		2.7.12
		 
	
	com.example
	demo
	0.0.1-SNAPSHOT
	demo
	Demo project for Spring Boot
	
		11
		2021.0.5
		2021.0.5.0
	
	
		
			org.springframework.boot
			spring-boot-starter-web
		
		
			org.springframework.boot
			spring-boot-devtools
			runtime
			true
		
		
			org.projectlombok
			lombok
			true
		
		
			org.springframework.boot
			spring-boot-starter-test
			test
		
		
		
			com.alibaba.cloud
			spring-cloud-starter-alibaba-nacos-discovery
		
		
		
			org.springframework.cloud
			spring-cloud-starter-openfeign
		
		
		
			org.springframework.cloud
			spring-cloud-starter-loadbalancer
		
	

	
		
		
			org.springframework.cloud
			spring-cloud-dependencies
			${spring-cloud-dependencies.version}
			pom
			import
		
		
		
			com.alibaba.cloud
			spring-cloud-alibaba-dependencies
			${spring-cloud-alibaba-dependencies.version}
			pom
			import
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
				
					
						
							org.projectlombok
							lombok
						
					
				
			
		
	


  3.3 配置application.properties

server.port=8089
spring.application.name=consumer
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.cloud.nacos.discovery.namespace=80d30c50-4f49-411c-8157-5bc514d7b1b0
spring.cloud.nacos.discovery.register-enabled=true
注意:服务端口不要和生产者一样。

  3.4 开启服务注册发现@EnableDiscoveryClient,和openFeign功能@EnableFeignClients

@SpringBootApplication
@EnableFeignClients
@EnableDiscoveryClient
public class DemoApplication {

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

}

  3.5 在生产者ProducerController里加个API接口,全路径为/producer/openfeign/{msg}

   @GetMapping("/openfeign/{msg}")
    public String testMsg(@PathVariable("msg") String msg) {
        return "生产者收到消息=" + msg;
    }

  3.6 在消费者里增加OpenFeignService接口,以调用生产者的接口

package com.example.demo;

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

@FeignClient(value = "mytest2")//生产者注册的服务名
public interface OpenFeignService {
    @GetMapping("/producer/openfeign/{msg}")//对应生产者API里的全路径
    String get(@PathVariable("msg")String msg);

}

  3.7 增加消费者控制器类

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
    @Autowired
    OpenFeignService openFeignService;

    @GetMapping("/test/{msg}")
    public String invokeProvider(@PathVariable String msg) {
        return "消费者在调用API," + openFeignService.get(msg);
    }
}

  3.8 启动生产者和消费者Springboot服务,在Nacos服务列表可以看到这两个服务已注册。

Nacos服务配置与注册,openFeign服务调用_第9张图片

  访问消费者API http://localhost:8089/consumer/test/hello,返回结果如下

消费者在调用API,生产者收到消息=hello

  3.9 通过向Nacos服务注册,由Nacos管理所有服务,实现了服务之间解耦。

你可能感兴趣的:(微服务,java,spring,cloud)