`

Hibernate Search + Spring + ActiveMQ

阅读更多

     使用了Hibernate Search 之后,在集群的环境下,就需要牵扯到同步index文件的问题, 《Hibernate Search In action》 提到了两种方式,一种是同步更新,一种是异步更新,下面来分别说说这种更新试的使用及实现:


1. 同步方式

      同步方式就是一个节点的更新能被其它的节点实时获得,最经典的方式就是各个节点都读写同一个文件夹,当然了,如果节点在不同的机器上,那就需要能够无验证网络访问这个文件夹。在节点比较少的情况下,这种情况可以很好的工作,如果节点很多,而且更新又比较频繁,这种情况可能会带来锁竞争及其它的一些问题。

     如何实现:《Hibernate Search In action》提到的比较多的是NFS,这是种在UNIX系统中使用的文件共享技术。windows下面也有对应的实现,但是,在64位的windows下可能会遇到一些麻烦。因为我的系统是windows64位的,所以我选用了另外一种实现方式,如在windows环境下,有两台机器A 和 B, A设置一个共享文件夹admin, 但在访问的时候需要用户名和密码,这时候可以用下面的这行命令在B机器上运行一下

                    rundll32 netplwiz.dll,UsersRunDll

命令,然后将需要访问A机器的用户名和密码设在B机器上,就可以访问这个 共享文件夹时不需要userName和Passwd了。

 

2. 异步方式

     在《Hibernate Search In action》中提及一种JMS方式,即对Index文件的更先方到一个JMS队列中,然后由一个master节点统一进行index, 其它slave节点定时去master节点同步被Index后的文件,从而达到同步文件的目的。因为是异步的,所以有新的数据会被延迟搜索出来的情况发生, 除此之外,因为使用了JSM,所以一种JMS技术需要被引入及维护,部署上也带来子一定的难度。但是相比较这些不足,这种方式比较稳定,当在节点比较多的环境下, 应该是作为首先的。下面来谈谈如何实现。

       其实在下面这篇文章中已经讲了如果去实现这种做法:   

         分布式Hibernate search



     但是按照文中的说法进行部署的时候,也遇到了一些小的问题,特在下面记录一下,以做为这篇文章的补充: 

    A.  上面这文章中提到,在你的环境中配置activemq.xml文件,然后使用如下的配置去启动,

<bean id="broker" class="org.apache.activemq.xbean.BrokerFactoryBean">  
  <property name="config" value="WEB-INF/activemq.xml" />  
  <property name="start" value="true" />  
</bean>  

     我认为不可取,应该让activemq在一上单独的Server中运行。因为当MQ是嵌在你的Application中运行时,如果你的Application挂了,那Slave节点就不可以将数据写到Q中,这样就会有丢数据的可能,而放在一个单独了Server中,如果master挂了,slave还是可以将数据放到Q中的,当master重启之后,又可以接着处理,当然了,为了保险,可能MQ也需要做集群。如单独启动,需要将下面的配置放在{ActiveMQ_HOME}/conf/activemq.xml文件中:

<amq:broker brokerName="HibernateSearchBroker"> 

     <amq:managementContext>  

         <amq:managementContext createConnector="false"/>  

     </amq:managementContext>  

       <amq:transportConnectors>  

         <amq:transportConnector uri="tcp://localhost:61616" />   

     </amq:transportConnectors>  

  </amq:broker>    

<amq:queue name="queue/hibernatesearch" physicalName="hibernateSearchQueue" /> 

启动之后,手动创建一个Q,名字叫hibernateSearchQueue。

       B. 所有的都配置好了之后,在运行的过程中,发现slave节点的message可以正常发送,Master节点也可以获取到这个message,但是就是index不正确,通过Debug才发现在取session的时候,出错了,但是没有报出来错误信息。Master节点都要包含一个类继承自AbstractJMSHibernateSearchController来处理message,需要实现getSession这个方法,一开始我的写法如下:

@Repository("hibernateSearchController")
@Tansactional
public class JMSHibernateSearchController extends AbstractJMSHibernateSearchController implements MessageListener {

    @Autowired

    private SessionFactory sessionFactory;

    @Override
    protected void cleanSessionIfNeeded(Session session) {}

    @Override
    protected Session getSession() {
        return sessionFactory.getCurrentSession();
    }

}

 


后来无论如何都不能获取到,后来改成如下的方式,成功:

   

    @Override
    protected Session getSession() {
        return sessionFactory.openSession();
    }

 

有些时候能进行Debug还是很重要的。


分享到:
评论

相关推荐

    分布式、微服务、云架构dubbo+zookeeper+springmvc+mybatis+shiro+redis】分布式大型互联网企业架构

    技术栈涵盖了从后端服务框架到前端框架的各种组件,如`Druid`数据库连接池、`Hibernate Validator`服务端验证、`SiteMesh`布局框架、`Activiti`工作流引擎等。前端方面,使用了`jQuery`、`Bootstrap`、`JQuery ...

    Java视频教程、ActiveMq、Hadoop、多线程、Kafka、WebSocket、SpringBoot、Solr、Shiro、Redis、Mysql

    Java视频教程+ActiveMq+Docker+ElasticSearch+Hadoop+Hibernate+ 多线程+Kafka+MondoDB+Mybatis+WebSocket+SpringCloud+SpringBoot+Solr+Shiro+Redis+Nginx+Mysql;全部是视频教程,收藏不易,给个好评。

    BOS物流思维导图整理

    Server端架构: Struts2+ Spring + Spring Data(简化持久层) + JPA接口+ Hibernate(JPA显现) 后台管理系统 页面架构 :jQuery Easyui 框架 前端互联网系统 页面架构 :BootStrap 响应式 + AngularJS Excel解析...

    分布式Hibernate search详解

    同时,还创建了一个名为"queue/hibernatesearch"的队列,用于存储Hibernate Search的消息。 另外,JNDI资源也需要在Tomcat的`MEAT-INF/context.xml`文件中配置,包括JMS Connection Factory和Queue。这使得应用程序...

    JavaEE求职简历-姓名-JAVA开发工程师-3年经验.docx

    他对于Spring全家桶(Spring、SpringMVC、Mybatis、Hibernate、SpringBoot、SpringData)有深入的理解,同时熟悉SSH(Spring+Struts+Hibernate)、SSM(Spring+SpringMVC+Mybatis)、以及SSS(Spring+SpringMVC+...

    spring-boot-reference.pdf

    Connecting to Elasticsearch by Using Spring Data 30.6.3. Spring Data Elasticsearch Repositories 30.7. Cassandra 30.7.1. Connecting to Cassandra 30.7.2. Spring Data Cassandra Repositories 30.8. ...

    self-entertainment:在线花店,消息中间件,springcloud,spring,sharding-jdbc,springboot,netty源码,vue,elasticsearch,lucene,mybatis,jpa

    自我娱乐项目模块简介activemq模块主要是测试消息中间件的一些特性,包括持久订阅,连续/定时投递,死信变量,kafka的生产者和消费者,指定位置自定义读取主题,了解分区和分组机制amazingt是一个常用的springweb...

    Web网站架构演变趋势.docx

    开发通常采用Java Web技术,如JSP/Servlet,或者使用成熟的框架组合,如Maven+Spring+Struts+Hibernate或Maven+Spring+SpringMVC+MyBatis。通过JDBC进行数据库操作。这种架构成本低,易于部署,但存在扩展性和容错性...

    java工程师简历_java简历.doc

    1. **鲜果任务水果配送项目**:使用Springmvc、Spring、Mybatis、Webservice CXF、Shiro、Redis、ActiveMQ和ElasticSearch等技术。项目中,利用Webservice CXF进行服务发布,Shiro结合Ehcache进行权限验证,Redis...

    Learn-More-Do-Less:Java资料库

    Hibernate Mybatis 消息中间件框架 ActiveMQ kafka 全文搜索引擎 ElasticSearch DSL语法 Kibana 微服务架构 Spring Boot Spring Cloud 开发语言 Java JavaSE JavaEE SQL Python 数据库相关 关系型数据库 MySql 非...

    Java面试参考简历.docx

    - **明宇乐购**:这是一个为明宇公司开发的网上商城平台,采用的技术栈包括Spring、SpringMVC、Mybatis、Redis、Solr、Dubbo、ActiveMQ、MySQL等。项目中使用了SSM框架和Dubbo+Zookeeper的分布式框架,主要分为客户...

    java+大数据.pdf

    消息队列MQ,如ActiveMQ和RabbitMQ(5天),以及Spring框架,包括SpringCloud、SpringMVC和Spring核心(10天)。Dubbo作为RPC框架的学习,也会有5天的时间。 在JavaEE项目实战方面,可以选择支付宝内部OA系统(15天...

    java项目简历_java简历.docx

    * 熟练使用 Struts2、Spring、SpringMVC、Hibernate、Mybatis 框架 * 熟悉 Oracle、Mysql 等关系型数据库,熟悉 PL/SQL 语言 * 熟悉 ActiveMQ、Apache Shiro、QuartZ 的基本使用 * 熟悉 WebService、Dubbo 等中间件...

    java+大数据(1).pdf

    - **ActiveMQ/RabbitMQ**(5天):理解消息中间件原理,用于解耦应用和服务间通信。 5. **Spring框架**: - **Spring Cloud/Spring MVC/Spring**(10天):微服务架构、MVC模式和核心容器。 6. **RPC框架**: -...

    WEB项目所需要的架包(最全的架包).zip

    4. **消息队列**: 如ActiveMQ或RabbitMQ,实现异步处理,提高系统响应速度。 5. **测试框架**: 如JUnit和Mockito,用于编写和执行单元测试,确保代码质量。 6. **模板引擎**: 如FreeMarker或Thymeleaf,生成动态...

    Java中间件实践

    ORM(对象关系映射)框架如Hibernate和MyBatis则提供了更高级别的抽象,使得开发者可以更专注于业务逻辑,而不是数据库操作。此外,数据库连接池如HikariCP和C3P0能有效地管理和复用数据库连接,提升系统性能。 在...

    JEE商城源代码

    2. **商品管理**:商品分类、添加、编辑、删除,商品展示,可能会用到MyBatis或Hibernate进行数据持久化。 3. **订单系统**:购物车、下单、支付、订单状态跟踪,涉及到了Spring MVC处理HTTP请求,与后端服务交互,...

    大型网站系统与Java中间件实践

    2. 数据访问:JPA(Java Persistence API)和Hibernate是Java进行数据库操作的主流工具,它们提供了ORM(对象关系映射)功能,简化了SQL操作。MyBatis则是另一种灵活的半自动ORM框架,允许开发者直接编写SQL语句。 ...

Global site tag (gtag.js) - Google Analytics