ElasticSearch集成webFlux响应式开发

目录

前言

1.Weflux特点:

2.WebFlux简单集成ElasticSearch

[2.1 引入基本依赖模块](#2.1 引入基本依赖模块)

3.application.yml文件的配置

4.定义Product实体类

5.定义ElasticSearch的数据访问层接口

6.定义Controller

7.启动SpringBoot程序,用postman进行接口测试


前言

WebFlux响应式开发是Spring Framework 5中引入的一个重要组件,它是Spring用于支持响应式编程的组件,提供了非阻塞,异步的Web框架。

1.Weflux特点:

非阻塞、异步、响应式流、函数式编程、高性能和高并发

1.1 非阻塞与传统的阻塞IO相比,在性能方面提升了千百倍

1.2 异步大大减少了因同步网络拥堵带来相应时间。

1.3 响应流:作为webflux的规范,提供异步流处理的接口和行为,允许开发者以声明式的方式处理数据流,同时保持了流的控制和背压管理。

1.4函数式编程:采用函数式编程规范,灵活利用lamda表达式简化编程模式,大大提高了代码的可读性和易用性。

1.5高并发和高性能:由于其本身的异步相应特点,WebFlux能够同时处理大量的并发请求,提高系统的吞吐量和响应时间,这使得其在分布式微服务架构中具有高并发和高可用的性能。

2.WebFlux简单集成ElasticSearch

2.1 引入基本依赖模块

java 复制代码
//SpingBoot的版本
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-webflux</artifactId>
     </dependency>
//elasticSearch依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>

3.application.yml文件的配置

java 复制代码
spring:
  elasticsearch:
    jest:
      uris: http://localhost:9200

4.定义Product实体类

java 复制代码
package com.example.spring.mono.entity;

import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.TypeAlias;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;

import java.util.Date;

/**
 * 产品
 */
@Data
@TypeAlias("product")
@Document(indexName = "product")
public class Product {
    //产品id
    @Id
    private String productId;
    //产品名称
    @Field(type = FieldType.Keyword)
    private String productName;
    //创建时间
    private Date createTime;
    //更新时间
    private Date updateTime;
    @Field(type = FieldType.Text, analyzer = "ik_max_word")
    private String description;

}

5.定义ElasticSearch的数据访问层接口

java 复制代码
public interface ProductRepository  extends ReactiveSortingRepository<Product, String> {


}

6.定义Controller

java 复制代码
package com.example.spring.mono.controller;

import com.example.spring.mono.entity.Product;
import com.example.spring.mono.repository.ProductRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;

import java.util.Date;
import java.util.Map;

@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductRepository productRepository;
  @PostMapping("/saveProduct")
    public Mono<Product>save(@RequestBody Product product){
      product.setCreateTime(new Date());
     return productRepository.save(product);
  }

  @GetMapping("/list")
  public Flux<Product> list(){

      return productRepository.findAll();
  }



}

7.启动SpringBoot程序,用postman进行接口测试

相关推荐
小鸡脚来咯29 分钟前
Git 新手入门指南
大数据·git·elasticsearch
说私域4 小时前
基于AI智能名片链动2+1模式服务预约商城系统的社群运营与顾客二次消费吸引策略研究
大数据·人工智能·小程序·开源·流量运营
塔能物联运维8 小时前
隧道照明“智能进化”:PLC 通信 + AI 调光守护夜间通行生命线
大数据·人工智能
highly20098 小时前
Gitflow
大数据·elasticsearch·搜索引擎
humors2218 小时前
韩秀云老师谈买黄金
大数据·程序人生
重生之绝世牛码9 小时前
Linux软件安装 —— SSH免密登录
大数据·linux·运维·ssh·软件安装·免密登录
StarChainTech9 小时前
无人机租赁平台:开启智能租赁新时代
大数据·人工智能·微信小程序·小程序·无人机·软件需求
Hello.Reader9 小时前
Flink DynamoDB Connector 用 Streams 做 CDC,用 BatchWriteItem 高吞吐写回
大数据·python·flink
早日退休!!!9 小时前
内存泄露(Memory Leak)核心原理与工程实践报告
大数据·网络
发哥来了10 小时前
主流AI视频生成工具商用化能力评测:五大关键维度对比分析
大数据·人工智能·音视频