hessian 和 spring结合,url动态替换
Hessian做远程服务,大家都知道的。 如何跟spring结合,网上有很多例子,这里就不写,主要是写一下,我遇到的一个问题,不知道大家解决的办法。
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 客户端Hessian代理工厂Bean --> <bean id="clientSpring" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <!-- 请求代理Servlet路径 --> <property name="serviceUrl"> <value>http://localhost:8080/HessianSpring/remote/helloSpring</value> </property> <!-- 接口定义 --> <property name="serviceInterface"> <value>com.wtang.isay.Isay</value> </property> </bean> </beans>
也就是说,客户端(也就是消费者),获取服务的地址已经写死了,那么服务端做集群的时候,多个url,
比如:
http://localhost:8080/HessianSpring/remote/helloSpring
http://localhost:8081/HessianSpring/remote/helloSpring这样的话,集群就无法做了。 大家是怎么解决这个问题的?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(12)
将多个服务注册到zookeeper下 . 存储节点为node1 , node2 , 分别对应 service1的服务 和 service2的服务 . 容器中添加计数器 , 对服务及节点的访问进行计数 . 这样既能实现服务集群 . 也能实现负载均衡 . dubbo的思路
HessianProxyFactoryBean类的setServiceUrl方法
引用来自“温佐镜”的评论
能否做个扩展实现服务发现,自动路由呢?或者使用其他服务框架,如dubbo、hsf,这些都支持注册中心
我没看过这部分的源码,大概也有个思路
扩展两个类
org.springframework.remoting.caucho.HessianServiceExporter 初始化完后把自己的服务向注册中心注册
org.springframework.remoting.caucho.HessianProxyFactoryBean 把静态的地址改成向向注册中心获取
不需要改动hessian,hessian只是底层的rpc实现,spring应该也是在上层封装而已
引用来自“温佐镜”的评论
能否做个扩展实现服务发现,自动路由呢?或者使用其他服务框架,如dubbo、hsf,这些都支持注册中心
引用来自“温佐镜”的评论
能否做个扩展实现服务发现,自动路由呢?或者使用其他服务框架,如dubbo、hsf,这些都支持注册中心
能否做个扩展实现服务发现,自动路由呢?或者使用其他服务框架,如dubbo、hsf,这些都支持注册中心
引用来自“兮风古道”的评论
这个可以用域名的方式做智能dns。你把example.com域名解析到你两个主机上host1,host2。 你在客户端访问的时候,dns可以帮你智能的解析到各个host上。
以上
这个可以用域名的方式做智能dns。你把example.com域名解析到你两个主机上host1,host2。 你在客户端访问的时候,dns可以帮你智能的解析到各个host上。
以上
这块你做过么?请问现在有实现么?
回复
我的实现和上面描述的思路差不多
以上都是思路,我说说具体实现中的一种方法:
重写HessianClientInterceptor和HessianProxyFactoryBean,用map缓存每个url对应的HessianProxy, 调用的时候动态去拿服务地址,如果map中有HessianProxy就直接用,否则就创建一个再用。