1. Eureka服务注册

1.1. 搭建eureka-server

1.1.1. 创建项目

创建一个简单的maven管理的java项目,用来运行eureka服务

1.1.2. 引入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

1.1.3. 编写启动类

在启动类上添加一个@EnableEurekaServer注解,开启eureka的注册中心功能:

package 包名;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class 启动类名 {
    public static void main(String[] args) {
        SpringApplication.run(启动类名.class, args);
    }
}

1.1.4. 编写配置文件

编写一个application.yml文件,内容如下:

server:
  port: 10086 #eureka的端口,可以自定义
spring:
  application:
    name: eureka-server #服务名,可以自定义
eureka:
  client:
    service-url: 
      defaultZone: http://127.0.0.1:10086/eureka

1.1.5. 启动服务

启动微服务,然后在浏览器访问:http://实际IP:实际端口/eureka
看到详情页面就是启动成功了。

image-20230712154018555

1.2. 服务注册

1.2.1. 引入依赖

在user-service的pom文件中,引入下面的eureka-client依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

1.2.2. 配置文件

修改application.yml文件,添加服务名称、eureka地址:

spring:
  application:
    name: 注册的服务名
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:10086/eureka #此处填写eureka-server的ip和端口

1.3. 消费端配置负载均衡

消费端使用服务名访问,必须配置负载均衡才能访问。

服务的消费者端,在任意一个配置类中,注入一个名为RestTemplate的Bean。(可以直接写在启动类中)

@Bean
@LoadBalanced // 启用负载均衡,如果使用的话,需要根据情况额外引入依赖
public RestTemplate restTemplate(){
    return new RestTemplate();
}

在需要调用其他服务的地方,自动注入RestTemplate对象,调用该对象的方法访问。

下面是一个案例

@Service
public class OrderService {

    @Autowired
    private OrderMapper orderMapper;

    @Autowired
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.获取用户id
        Long userId = order.getUserId();
        // 3.调用userservice模块接口查询user数据
        User user = restTemplate.getForObject("http://userservice/user/" + userId, User.class);
        // 4.数据组装
        order.setUser(user);
        // 4.返回
        return order;
    }
}

2. Nacos注册中心

2.1. 部署Nacos服务

2.1.1. 下载软件

访问Nacos的官网,查看Git地址和手册 Nacos

image-20230712165656845

也可以直接访问Git仓库的发行地址下载软件 Releases · alibaba/nacos (github.com)

2.1.2. 修改配置文件

在软件的conf/application.properties文件中,可以修改nacos服务的端口号

image-20230712170802766

2.1.3. 启动

在windows平台,进入nacos/bin目录下,使用如下命令进行单机启动

startup.cmd -m standalone

nacos的集群启动需要额外对配置文件进行修改,然后双击startup.cmd即可运行。具体的配置方法看后面的笔记。

在启动界面可以看到管理后台的地址,一般来说,默认地址是http://127.0.0.1:8848/nacos/index.html

2.2. 服务注册

Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

主要差异在于:

  • 依赖不同
  • 服务地址不同

2.2.1. 引入依赖

在父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.6.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2.2.2. 配置nacos地址

在user-service和order-service的application.yml中添加nacos地址:

spring:
  application:
    name: 注册的服务名
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos
        cluster-name: sh #选填,集群名称
        namespace: dev #选填,命名空间

2.3. 使用案例

同1.3.使用案例。

3.3. 消费端配置负载均衡

同1.3

如人饮水,冷暖自知。
最后更新于 2023-08-03