微服务--商品上架并保存到ElasticSearch流程

一丶ElasticSearch是什么?

1.ES是一个分布式的全文搜索引擎,为了解决原生Lucene使用的不足,优化Lucene的调用方式,并实现了高可用的分布式集群的搜索方案,ES的索引库管理支持依然是基于Apache Lucene(TM)的开源搜索引擎。

2.ES也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的 RESTful API来隐Lucene的复杂性,从而让全文搜索变得简单。

3.总的来说ElasticSearch简化了全文检索lucene的使用,同时增加了分布式的特性,使得构建大规模分布式全文检索变得非常容易。

4.Lucene是apache下的一个开源的全文检索引擎工具包(一堆jar包)。它为软件开发人员提供一个简单易用的工具包(类库),以方便的在小型目标系统中实现全文检索的功能。Lucene适用于中小型项目 ,ES适用于中大型项目(它底层是基于lucene实现的)

二丶SpringCloud项目整合ElasticSearch

1.整一个ElasticSearch模块(名字任取)

2.导入依赖

    <-- elasticsearch包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
    <!--测试类-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

3.编写一个Doc,这里以课程类(course)为例

@Document(indexName = "course" , type = "_doc")
@Data
public class CourseDoc {
    // ID
    @Id
    private Long id;
    // 课程名
    @Field(type = FieldType.Text, analyzer = "ik_smart", searchAnalyzer = "ik_smart") // 指定为 分词
    private String name;
    // 价格
    @Field(type = FieldType.Double)
    private BigDecimal price;
    // 原价
    @Field(type = FieldType.Double)
    private BigDecimal priceOld;
    // 课程类型
    @Field(type = FieldType.Long)
    private Long courseTypeId;
    // 课程等级
    @Field(type = FieldType.Keyword)
    private String gradeName;
    // 课程封面
    @Field(type = FieldType.Keyword)
    private String pic;
    // 课程上线时间
    @Field(type = FieldType.Date)
    private Date onlineTime;
    // 课程老师名字
    @Field(type = FieldType.Keyword)
    private String teacherName;
    // 课程是否收费 - 收费/免费
    @Field(type = FieldType.Keyword)
    private String chargeName;
    // 课程销量
    @Field(type = FieldType.Integer)
    private Integer saleCount;
    // 课程浏览量
    @Field(type = FieldType.Integer)
    private Integer viewCount;
}

4.编写repository,并继承ElasticsearchRepository类


@Repository
public interface CourseElasticsearchRepository  extends ElasticsearchRepository<CourseDoc,Long> {

}

这里的泛型第一个参数类型是编写的Doc类,第二个参数类型是Doc中id的类型

5.初始化索引库和文档映射

ElasticsearchTemplate 是一个ES的工具类

@RunWith(SpringRunner.class)
@SpringBootTest(classes = SearchStart.class)
public class ESTest {

    @Autowired
    private ElasticsearchRestTemplate template;

    @Test
    public void testCreateIndex() {
        //创建索引
        template.createIndex(CourseDoc.class);
        //做文档映射
        template.putMapping(CourseDoc.class);
    }

6.编写controller接口类

@RestController
@RequestMapping("/es/course")
public class SearchController {

    @Autowired
    private ISearchService searchService;

    @PostMapping("/search")
    public JSONResult search(@RequestBody CourseDoc doc){
        searchService.search(doc);
        return JSONResult.success();
    }
}

7.编写service实现类

@Service
public class SearchServiceImpl implements ISearchService {
    @Autowired
    private CourseElasticsearchRepository courseElasticsearchRepository;

    @Override
    public void search(CourseDoc doc) {
        courseElasticsearchRepository.save(doc);
    }
}

8.抽取feiqn接口

@FeignClient(value = "service-search",fallbackFactory = SearchFallbackFactory.class)
public interface SearchClient {

    @PostMapping("/es/course/search")
    JSONResult search(@RequestBody CourseDoc doc);
}

9.编写降级类

@Component
public class SearchFallbackFactory implements FallbackFactory<SearchClient> {
    @Override
    public SearchClient create(Throwable throwable) {
        return new SearchClient() {
            @Override
            public JSONResult search(CourseDoc doc) {
                throwable.printStackTrace();
                return JSONResult.error("调用服务失败");
            }
        };
    }
}

10.调用feiqn接口

调用之前,调用的模块需要开启feiqn支持(@EnableFeignClients),然后配置feiqn的降级

feign:
  sentinel:
    enabled: true

然后注入feiqn接口即可使用方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于微服务中使用Elasticsearch的问题,可以提供以下的一些基本信息: Elasticsearch是一个开源的分布式搜索和分析引擎,广泛用于构建实时的、可伸缩的全文搜索应用。在微服务架构中,可以将Elasticsearch作为一个独立的服务使用,提供全文搜索和数据分析的功能。 在微服务架构中使用Elasticsearch有以下几个常见的场景: 1. 日志收集和分析:微服务架构中的每个服务都会产生大量的日志,使用Elasticsearch可以将这些日志集中存储,并进行实时的搜索和分析。通过对日志进行聚合、过滤和统计,可以方便地进行故障排查、性能优化等工作。 2. 数据检索和搜索:微服务架构中的各个服务通常需要对大量的数据进行查询和搜索,使用Elasticsearch可以提供高效的全文搜索和过滤功能。通过建立索引和定义搜索查询,可以快速地检索到符合条件的数据。 3. 数据分析和统计:微服务架构中的各个服务产生的数据可以通过Elasticsearch进行聚合和统计分析。通过使用Elasticsearch的聚合功能,可以方便地对数据进行分组、求和、计数等操作,得到各种统计指标。 为了在微服务中使用Elasticsearch,一般需要进行以下几个步骤: 1. 安装和配置Elasticsearch集群:根据自己的需求,安装和配置一个或多个Elasticsearch节点组成一个集群。可以使用官方提供的安装包或者Docker容器来方便地进行安装和配置。 2. 定义索引和映射:在Elasticsearch中,数据通过索引进行组织和管理。每个索引可以包含一个或多个类型,每个类型定义了数据的结构和字段。在使用Elasticsearch之前,需要先定义好索引和类型的映射关系。 3. 数据的索引和搜索:将需要进行搜索和分析的数据通过Elasticsearch的API进行索引。可以使用Elasticsearch提供的各种API来进行数据的增删改查操作。通过定义搜索查询,可以对索引中的数据进行搜索和过滤。 4. 监控和优化:在使用Elasticsearch的过程中,需要对集群进行监控和优化。可以使用Elasticsearch提供的监控工具或者第三方工具来监控集群的状态和性能,并根据需要进行优化。 当然,以上只是对微服务中使用Elasticsearch的一个简单介绍,实际使用中还需要根据具体的业务需求进行更详细的配置和使用。希望以上信息对你有所帮助!如果有任何问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值