A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


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 solorhomeconf目录 -confname 文件名;
7. 添加分词器
8. 添加项目所需的域字段:商品id、商品标题、商品买点、商品价格、商品图片、分类名称、商品描述
9. collection分片
10. 在项目中于spring整合,配置一个cloudSolrServerbean,需要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.1j2ee1.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. 故而引用activeMQactiveMQ是一个消息中间件,这样可以使我们的服务之间完成解耦。
iv. 怎么使用的ActiveMQ?
1. 使用activeMQ需要有一个生产者producer和consumer,最重要的是一个JMSTemplate模板
2. 发送端Spring整合ActiveMQ(抽象工厂设计模式)
a) 配置一个真正可以生产Connection的工厂ActiveMQConnectionFactory,需要指定borkerURLactiveMQ服务的主机号和端口)
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)

TIM截图20180126112016.png

6 个回复

倒序浏览
不错, 不错 ...........
回复 使用道具 举报
666666666666666666
回复 使用道具 举报
棒棒哒 ..............
回复 使用道具 举报
不错, 不错 ...........
回复 使用道具 举报
666666666666666666666666666
回复 使用道具 举报
666666666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马