Spring cloud alibaba 集成 nacos 以及 Feign 负载调用(3)

Nacos 简介

先贴上官网地址

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

这里,我们先使用 nacos 作为服务的注册中心来使用,先测试负载调用,暂时不作为 配置中心。后面我们一点点的来做集成。

Nacos 服务启动

我这边使用的版本是:nacos-server-1.3.2,大家可以根据自己的需要去下载不同的版本。

运行的服务器是自己搭建的虚拟机:centos7

nacos 项目是一个基于 spring 做的项目,我们进入conf 文件目录中去,可以看到:

 上面有配置文件 application.properties,以及集群的文件 cluster.conf.example,mysql 的建表语句等 nacos-mysql.sql 等。

启动服务

我们这里就使用单节点启动,不做过多的配置,先熟悉下怎么使用,以及怎么进行程序集成。

// 启动服务
sh startup.sh -m standalone

// 停止服务
sh shutdown.sh

访问

用户名和密码都是:nacos

工程集成 Nacos

video 模块

依赖引入

<!--添加nacos客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

配置文件

server:
  port: 8000

spring:
  application:
    name: demo-video

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.152.129:3306/cloud_video?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: admin
    password: 123456

# 增加服务发现地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.152.129:8848

# 控制台输出sql、下划线转驼峰
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

 启动类增加注解 @EnableDiscoveryClient

@SpringBootApplication
@EnableDiscoveryClient
@MapperScan("com.demo.mapper")
public class VideoApplication {

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

尝试启动

控制台可以看到有对应的日志输出

 我们访问 nacos 控制台,就可以看到对应的服务已经注册上去了

警告处理 

控制台上面存在警告,我们这里处理下:

WARN 6384 --- [           main] c.n.c.sources.URLConfigurationSource     : No URLs will be polled as dynamic configuration sources.

我们只需要创建一个 config.properties 文件就可以了,里面的内容可以为空

 然后,我们再次启动,就没有警告信息了:

启动多个 video 服务

在测试负载调用之前,我们先多启动几个 video 服务,先修改配置文件的端口,然后在复制一个对应的启动服务:

 复制多个服务:

 然后点击确认,启动对应的服务:

 我们以同样的方式再次启动一个的服务:

 我们在nacos 后台就可以看到对应的服务集群了:

 负载均衡调用

order 模块

 

pom 文件增加依赖

<!--添加nacos客户端-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
 </dependency>

application.yml 增加 nacos 的配置

server:
  port: 9000

spring:
  application:
    name: demo-order

  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://192.168.152.129:3306/cloud_video?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: admin
    password: 123456

  ## 增加 nacos 服务发现地址
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.152.129:8848

# 控制台输出sql、下划线转驼峰
mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true

启动类增加注解

@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {

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

RestTemplateConfig 增加配置文件

@Configuration
public class RestTemplateConfig {

    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

OrderController 增加对外提供服务访问,以及负载调用的方式

@RestController
@RequestMapping("api/v1/video_order")
public class OrderController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/save")
    public Object save(int videoId) {

        // 使用 负载均衡策略
        // 这里通过服务名去调用,这里的服务名就是在 nacos 上面的服务名称
        Video video = restTemplate.getForObject("http://demo-video/api/v1/video/find_by_id?videoId=" + videoId, Video.class);

        VideoOrder videoOrder = new VideoOrder();
        videoOrder.setVideoId(video.getId());
        videoOrder.setVideoTitle(video.getTitle());
        videoOrder.setCreateTime(new Date());
        videoOrder.setServerInfo(video.getServerInfo());

        return videoOrder;
    }
}

启动 Order 服务

 nacos 控制台

 测试

localhost:9000/api/v1/video_order/save?videoId=30

 这个可以多访问几次,可以看到是返回的服务器地址是不一样的。

使用 Fiegn 接口实现调用

增加对应的服务类

 Order 模块中引入依赖

<!--   增加 openFeign依赖     -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

VideoService 增加内容

@FeignClient(name = "demo-video")    // 这里需要填写的就是相应的服务名
public interface VideoService {

    @GetMapping(value = "/api/v1/video/find_by_id")
    Video findById(@RequestParam("videoId") int videoId);


    // 这里使用 @RequestMapping 与 @PostMapping 注解都是可以的
    @RequestMapping(value = "/api/v1/video/saveByFeign")
    int saveByFeign(@RequestBody() Video video);
}

OrderController 中增加对应的访问接口

@Autowired
private VideoService videoService;

@RequestMapping("/findById")
public Object findById(int videoId) {

    Video video = videoService.findById(videoId);

    VideoOrder videoOrder = new VideoOrder();
    videoOrder.setVideoId(video.getId());
    videoOrder.setVideoTitle(video.getTitle());
    videoOrder.setCreateTime(new Date());
    videoOrder.setServerInfo(video.getServerInfo());
    return videoOrder;
}

启动类中增加注解 @EnableFeignClients

@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class OrderApplication {

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

启动服务测试访问

http://localhost:9000/api/v1/video_order/findById?videoId=30

最后,到这里就算集成完了。对于不同的服务模块,如果是需要通过 nacos 负载访问的是,是都需要注册到 nacos 服务端中。

猜你喜欢

转载自blog.csdn.net/qq_18948359/article/details/126176988
今日推荐