由单点登陆引发的问题(二):用户数据同步

用户数据同步:A系统在自己的数据库里有用户数据表,B系统在自己的数据库里有用户数据表,即他们相互独立。现在要求他们表里的用户名和密码能保持同步。A系统w r,B系统r;在A系统中进行用户的CRUD。B系统用户数据必须进行同步的CRUD。

针对这个场景,立哥给我提出了2个思路。
实时性要求比较高的:
*A系统w,发送一条mq消息。B系统监听mq,收到消息,做单条数据同步
实时行要求不高的:
*可以考虑数据库同步--定时任务

由于用户在2个系统里来回浏览相对频繁,实时性要求较高。我们都偏向于第一个思路。

原先我打算采用httpclient。
即在A系统修改用户数据,通过httpclient来对B系统的进行操作。即按照传统的思想同步操作,但这样又带来了一个问题:增加了A系统和B系统的耦合度。

考虑异步方式:JMS (ActiveMQ)
[quote]
JMS
* 它可以把不影响用户执行结果又比较耗时的任务(比如发邮件通知管理员)异步的扔给JMS 服务端去做,而尽快的把屏幕返还给用户。
* 服务端能够多线程排队响应高并发的请求,并保证请求不丢失。
* 可以在Java世界里达到最高的解耦。客户端与服务端无需直连,甚至无需知晓对方是谁、在哪里、有多少人,只要对流过的信息作响应就行了,在企业应用环境复杂时作用明显。

ActiveMQ的特性:
* 完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,也是Apache Geronimo默认的JMS provider。
* POJO withdout EJB Container,不需要实现EJB繁琐复杂的Message Bean接口和配置。
* Spring Base,可以使用Spring的各种特性如IOC、AOP 。
* Effective,基于Jencks的JCA Container实现 pool connection,control transactions and manage security。[/quote]

JMS两种实现方法
Topic==>消息主题 是发布/订阅机制 一个消息产生多个对应 1:N
Queue==>消息队列 是点到点机制 一个消息产生一个对应 1:1

无论采用哪种实现方式,在两个系统中,对应的physicalName必须相同,这样才能接收到消息。

JMS消息类型
1.使用 TextMessage 类
2.使用 BytesMessage 类
3.使用映射消息
4.使用流消息
5.使用对象消息

我采用的是第5种,[color=red]注意对象必须实现java.io.Serializable接口,不然会抛出java.io.InvalidClassException。在A和B系统中的两个POJO必须完全一样,serialVersionUID也一样。[/color]

使用JMS集成两个应用,需要两个应用连接同一个jms server。
所以首先要确保B应用连接到A应用启动的embedded ActiceMQ。
<!--  embedded ActiveMQ Broker -->
<amq:broker useJmx="false" persistent="true">
<amq:persistenceAdapter>
<amq:amqPersistenceAdapter directory="/home/dylan/JavaPro/amq"/>
</amq:persistenceAdapter>
<amq:transportConnectors>
<amq:transportConnector uri="tcp://localhost:61616" />
</amq:transportConnectors>
</amq:broker>

ActiveMQ connectionFactory -->
<!--连接自己的activeMQ -->
<amq:connectionFactory id="jmsConnectionFactory" brokerURL="vm://localhost" />



<amq:connectionFactory id="jmsConnectionFactory" brokerURL="tcp://localhost:61616" />


关于ActiveMQ,可以参考
Apache ActiveMQ > Using ActiveMQ > Xml Reference > XBean XML Reference 5.0
[url]http://activemq.apache.org/xbean-xml-reference-50.html#XBeanXMLReference5.0-connectionFactoryelement[/url]

ActiveMQ5.0实战一、二、三
[url]http://www.iteye.com/topic/153171[/url]

引用来自:ActiveMQ4.1 +Spring2.0的POJO JMS方案
[url]http://wiki.springside.org.cn/display/springside/ActiveMQ[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值