黑马程序员技术交流社区
标题: [重庆校区]淘淘项目技术总结2 [打印本页]
作者: xiongliu 时间: 2018-1-26 11:23
标题: [重庆校区]淘淘项目技术总结2
1) Solr服务
i. Solr是什么?
1. 它是基于Lucene的全文检索服务器,solr提供了比lucene更为丰富的查询语言,同时实现了可配置,可扩展,并对索引,搜索性能进行了优化。Solr可以独立运行在servlet容器中。Solr提供了一个管理界面,通过管理界面可以查询solr的配置和运行情况。
ii. 项目中那些地方用到了solr?
1. 我们的项目单独搭建了一个solr服务,搜索服务工程,搜索系统。
iii. 为什么要使用solr?
1. solr相对比于Lucene,它是一款企业级的搜素引擎系统,可以独立运行,通过solr可以非常快速的构建企业的搜索引擎,通过solr也可以高效的完成站内搜索功能;而Lucene是一个全文检索引擎工具包,它不是完整的全文检索引擎。
2. solr和elasticsearch对比:
a) solr利用zookeeper进行分布式管理,而elasticsearch自身带有分布式协调管理功能
b) solr支持更多格式的数据,而es仅支持json文件格式
c) solr官方提供的功能更多,而es本身更注重于核心功能,高级功能多由第三方插件提供
d) solr在传统的搜索应用中表现好于es,但是在处理实时搜索应用时效率明显低于es
e) solr是传统搜索应用的有力解决方案,但es更适合于新兴的实时搜索应用
f) solr成熟,稳定,再不考虑建索引时,其效率更快,故而我们的项目选用solr,
g) 主要原因也是因为我们做的其实也是一个传统电商项目,不设计太多实时搜索。
iv. 怎么使用的solr?
1. 安装solr服务器,需要jdk1.7及其以上环境
2. 需要一个servlet容器,我们采用tomcat
3. 搭建solr集群,需要4个tomcat实例,4个solrhome,3个zookeeper节点。
4. 配置zookeeper,在每一个zookeeper里面创建一个data目录,并且创建一个myid,修改zoo.xml中的端口号、dataDir、文件尾部添加server的信息
5. 配置4个tomcat:修改端口号,需要把solr.war包复制过来,修改solr的家目录,修改每一个solrhome里的solr.xml,修改tomcat/bin/Catalina.sh添加一个JAVA_OPTS
6. 关联zookeeper和solor:使用zkcli.sh -zkhost zookeeper的主机端口号 -cmd upconfig -confdir solorhome的conf目录 -confname 文件名;
7. 添加分词器
8. 添加项目所需的域字段:商品id、商品标题、商品买点、商品价格、商品图片、分类名称、商品描述
9. collection分片
10. 在项目中于spring整合,配置一个cloudSolrServer的bean,需要bean中指出zkhost和使用的collection
11. 在使用时我们使用cloudSolrServer的父接口solrserver。
12. 为域字段创建一个实体SearchItem便于封装数据
13. 服务层使用步骤:
a) 创建一个solrserver对象
b) 为每一个商品创建一个solrinputdocument对象
c) 为文档添加域
d) 向索引库中添加文档
14. 表现层使用步骤:
a) 创建一个solrserver对象
b) 创建一个solrquery对象
c) 需要设置查询条件,分页条件,设置默认搜索域,高亮设置等
d) 执行查询,返回queryResponse对象
e) 取返回结果封装到list<searchItem>中
f) 返回查询结果的总记录数,计算查询结果总页数
g) 得到查询结果
v. 使用solr存在什么问题?
1. 索引库和数据库同步问题
2. 解决:使用activeMQ,当我们添加修改删除商品时发送一条topic消息,在我们的搜索服务里需要写一些商品变化监听,当发出消息后我们应该执行那些具体的操作,如接受到商品添加的消息,这向索引库中添加当前商品的信息。
2) ActiveMQ(消息队列)
i. 什么是activemq?
1. 开源的消息总线
2. 特点
a) 多种语言和协议编写客户端。
b) 完全支持jms1.1和j2ee1.4规范(持久化,xa消息,事务)
c) 对spring支持
d) 支持ajax
3. 消息传递形式:
a) 点对点模式:一个生产者一个消费者
b) 发布订阅模式:一个生产者多个消费者
c) Jms消息格式:StreamMessage、mapMessage,textMessage(常用)、objectMessage、bytesMessage
4. 在linux在安装启动即可
ii. 项目中什么地方使用了activeMQ?
1. 在对商品执行添加修改删除功能操作时,使用activeMQ发出一条商品具体变化的消息,如增加一个商品,发出一条商品增加的消息textMessage(包含一个商品id),在搜索服务层监听接收消息,根据消息包含的商品id查询数据库,再将对应的商品同步到索引库。
iii. 为什么要使用activeMQ
1. 以往在业务逻辑中添加一个同步业务逻辑,这样做的缺点是,业务逻辑耦合度高,业务拆分不明确
2. 业务逻辑和调用服务分开实现,业务逻辑达到了分开,但是服务间的耦合变高,服务的启动还有先后顺序。
3. 故而引用activeMQ,activeMQ是一个消息中间件,这样可以使我们的服务之间完成解耦。
iv. 怎么使用的ActiveMQ?
1. 使用activeMQ需要有一个生产者producer和consumer,最重要的是一个JMSTemplate模板
2. 发送端Spring整合ActiveMQ(抽象工厂设计模式)
a) 配置一个真正可以生产Connection的工厂ActiveMQConnectionFactory,需要指定borkerURL(activeMQ服务的主机号和端口)
b) 配置一个用于管理具体工厂的抽象工厂,需要引用真正的工厂
c) 配置jms模板,它可以进行消息发送、接收等,,需要给它指定引用connectionFactory
d) 配置消息的模式)(queue----ActiveMQQueue或者topic----ActviveMQTopic)
e) 服务层发送消息直接使用JmsTemplate调用send方法发送消息
3. 消息接收端Spring整合ActiveMQ
a) 写一个监听器监听消息的类,这个类需要实现MessageListener接口,这个类中接收消息,取消息包含的信息再去操作具体业务
b) 与发送端的spring的整合大体与发送端一致,但是还需要配置自定义监听器和监听器容器,在监听器容器中需要指定连接工厂、消息模式和监听器
v. 使用ActiveMQ存在什么问题?
1. 怎样保证消息必达
a) 消息落地,就是把消息保存到数据库,这也解决了消息服务器宕机的问题
b) 消息超时、重传、确认,增加一些方法,解决消息丢失和是否确认收到消息
-
TIM截图20180126112016.png
(31.05 KB, 下载次数: 1)
作者: 零度☆黎明 时间: 2018-1-27 10:21
不错, 不错 ...........
作者: 零度☆黎明 时间: 2018-1-27 11:14
666666666666666666
作者: mydorling11 时间: 2018-1-29 15:32
棒棒哒 ..............
作者: mydorling11 时间: 2018-1-29 15:45
不错, 不错 ...........
作者: 荼靡 时间: 2018-2-2 15:41
666666666666666666666666666
作者: 轨迹72 时间: 2018-7-4 10:33
666666666666666666
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |