四、Nacos服务注册中心
目录一、Nacos基本介绍二、构建NacosServer端一、Nacos基本介绍1.Nacos是什么Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础
·
目录
一、Nacos基本介绍
- 1.Nacos是什么
- Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理
- Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施
- Nacos是Java语言编写的,阿里巴巴推出的
其实总结就是:Nacos可以帮助我们实现“服务注册中心”和“分布式配置中心”
二、构建NacosServer端
- 1.Nacos下载地址
- https://github.com/alibaba/nacos/releases
- 2.Nacos启动方法
- windows下启动:D:\nacos-server-2.0.3\nacos\bin\startup.cmd(路径根据自己的目录)
- 3.Nacos2.0启动错误
- Nacos默认是集群方法启动
- 可以修改为单机模式启动
- 修改startup.cmd,将
set MODE="cluster"
修改为set MODE="standalone"
- 修改startup.cmd,将
- 4.访问Nacos
- 访问地址:http://192.168.187.1:8848/nacos/index.html
- 默认账户密码:nacos/nacos
三、手动实现Nacos服务注册与服务发现
1、服务注册API
- 1.Nacos实现服务注册API接口
- 发送post请求:
http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=sjyl-producer&ip=127.0.0.1&port=8080
- 发送post请求:
- 2.使用PostMan发送测试
- 3.在Nacos的服务列表中查看是否注册成功
- 4.服务续约问题
- 15s内没有服务续约:服务信息为粉色,表示是不健康的服务
- 30s内没有服务续约:那么Nacos就会将该服务剔除
2、服务发现API
- 1.Nacos实现服务发现API接口
- 浏览器访问地址(其中sjyl-producer就是上一步服务注册的服务名):
http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=sjyl-producer
- 浏览器访问地址(其中sjyl-producer就是上一步服务注册的服务名):
{
"name": "DEFAULT_GROUP@@sjyl-producer",
"groupName": "DEFAULT_GROUP",
"clusters": "",
"cacheMillis": 10000,
"hosts": [
{
"instanceId": "127.0.0.1#8080#DEFAULT#DEFAULT_GROUP@@sjyl-producer",
"ip": "127.0.0.1",
"port": 8080,
"weight": 1.0,
"healthy": true,
"enabled": true,
"ephemeral": true,
"clusterName": "DEFAULT",
"serviceName": "DEFAULT_GROUP@@sjyl-producer",
"metadata": {},
"instanceIdGenerator": "simple",
"instanceHeartBeatTimeOut": 15000,
"ipDeleteTimeout": 30000,
"instanceHeartBeatInterval": 5000
}
],
"lastRefTime": 1648629964220,
"checksum": "",
"allIPs": false,
"reachProtectionThreshold": false,
"valid": true
}
四、NacosClient实现服务注册
- 1.新建项目
- 父项目:spring-cloud-nacos
- 子项目:spring-cloud-nacos-producer
- 2.父项目pom依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
- 3.子项目pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
</dependencies>
- 4.application.yml
server:
port: 8080
spring:
application:
name: sjyl-producer-member #服务名称 在 注册中心展示服务名称 --
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos服务注册中心Server端 地址
- 5.启动类AppProducer
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AppProducer {
public static void main(String[] args) {
SpringApplication.run(AppProducer.class);
}
}
- 6.启动spring-cloud-nacos-producer
五、NacosClient实现服务发现
- 1.新建子项目spring-cloud-nacos-consumer
- 2.pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>0.2.2.RELEASE</version>
</dependency>
</dependencies>
- 3.application.yml
server:
port: 8070
spring:
application:
name: sjyl-consumer-order #服务名称 在 注册中心展示服务名称 --
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # nacos服务注册中心Server端 地址
- 4.OrderToMemberService
- 这里就不远程RPC调用了,直接返回从nacos注册中心获取的ip和端口
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class OrderToMemberService {
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/orderToMember")
public String orderToMember() {
/*
* 根据服务名称 从注册中心 获取 会员的接口地址
* 服务提供 启动多个集群
*
*/
List<ServiceInstance> instances = discoveryClient.getInstances("sjyl-producer-member");
ServiceInstance serviceInstance = instances.get(0);
// 会员服务的ip和端口
return "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/" + "getMember";
}
}
- 5.启动类AppConsumer
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class AppConsumer {
public static void main(String[] args) {
SpringApplication.run(AppConsumer.class);
}
}
- 6.nacos服务列表
- 7.浏览器访问
- 访问地址:http://127.0.0.1:8070/orderToMember
- 我们可以看到获取到的ip地址和端口就是服务sjyl-producer-member的ip和端口
六、整合RestTemplate实现RPC
- 1.RestTemplate介绍
- RestTemplate是从 Spring3.0 开始支持的一个 HTTP 请求工具
- 它提供了常见的REST请求方案的模版,例如 GET 请求、POST 请求、PUT 请求、DELETE 请求以及一些通用的请求执行方法 exchange 以及 execute
- RestTemplate继承自 InterceptingHttpAccessor 并且实现了 RestOperations 接口,其中RestOperations 接口定义了基本的 RESTful 操作,这些操作在 RestTemplate 中都得到了实现
- RestTemplate底层是基于HttpClient封装的
- 2.OrderToMemberService代码修改
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@RestController
public class OrderToMemberService {
@Autowired
private DiscoveryClient discoveryClient;
@Autowired
private RestTemplate restTemplate;
@RequestMapping("/orderToMember")
public String orderToMember() {
/*
* 根据服务名称 从注册中心 获取 会员的接口地址
* 服务提供 启动多个集群
*
*/
List<ServiceInstance> instances = discoveryClient.getInstances("sjyl-producer-member");
ServiceInstance serviceInstance = instances.get(0);
// 会员服务的ip和端口
String memberUrl = "http://" + serviceInstance.getHost() + ":" + serviceInstance.getPort() + "/" + "getMember";
return "订单服务调用会员服务:" + restTemplate.getForObject(memberUrl, String.class);
}
}
- 3.AppConsumer启动增加RestTemplate注入
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
public class AppConsumer {
public static void main(String[] args) {
SpringApplication.run(AppConsumer.class);
}
/*
* 将restTemplate注入到spring ioc容器
*
*/
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
- 4.spring-cloud-nacos-producer增加MemberService
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MemberService {
@RequestMapping("/getMember")
public String getMember() {
return "我是会员服务接口...";
}
}
- 5.浏览器测试
- 浏览器访问:http://127.0.0.1:8070/orderToMember
更多推荐
已为社区贡献1条内容
所有评论(0)