现在试试通过JMS,在应用程序之间发送消息。
先看看spring提供的RPC方案(其实还有其他方案,只是没见过谁用)。
需要使用到这两个类:
·org.springframework.jms.remoting.JmsInvokerServiceExporter将bean导出为基于消息的服务
·org.springframework.jms.remoting.JmsInvokerProxyFactoryBean让客户端调用服务

比较一下JmsInvokerServiceExporter和RmiServiceExporter:

package pac.testcase.jms;
public interface JmsRmiService {
String doServe(String requestedNum);
}
package pac.testcase.jms;
import org.springframework.stereotype.Service;
@Service
public class JmsRmiServiceImpl implements JmsRmiService { public String doServe(String content) {
System.out.println(content.concat(" has been requested!!"));
return "your message::".concat(content).concat(":::length:")+content.length();
}
}

将这个pojo声明为服务,在spring配置文件中配置:

<bean id="serverService" class="org.springframework.jms.remoting.JmsInvokerServiceExporter"
p:serviceInterface="pac.testcase.jms.JmsRmiService"
p:service-ref="JmsRmiServiceImpl">
</bean>

需将他设置为jms监听器,配置方法和一般的jmsMessageListener的配置相同:

<amq:connectionFactory id="jmsFactory" />
<jms:listener-container
destination-type="queue"
connection-factory="jmsFactory"
concurrency="3"
container-type="simple">
<jms:listener destination="sparta" ref="serverService" />
</jms:listener-container>

container-type有simple和default,根据不同的type也可以使用task-Executor,这里先简单记录一下。

先启动jms broker再启动:

new ClassPathXmlApplicationContext("classpath:applicationContext-*.xml").getBean(JmsRmiService.class);

client这边我需要一个调用代理帮我去调用接口,也就是JmsInvokerProxyFactoryBean;
配置如下:

<amq:connectionFactory id="connectionFactory" />
<bean id="clientService" class="org.springframework.jms.remoting.JmsInvokerProxyFactoryBean"
p:serviceInterface="pac.test.jms.SenderRmiService"
p:connectionFactory-ref="connectionFactory"
p:queueName="sparta"/>

配置中的serviceInterface是client端中根据要调用的方法创建的一个接口。

main方法试着调用看看:

public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
SenderRmiService service = (SenderRmiService)context.getBean("clientService");
System.out.println(service.doServe("这才是斯巴达!!"));
}

server端输出:

client端输出:

JMS - 基于JMS的RPC的更多相关文章

  1. ActiveMQ基于JMS的pub/sub传播机制

    原文地址:[ActiveMQ实战]基于JMS的pub/sub传播机制 发布订阅模型 就像订阅报纸,我们可以选择一份或者多份报纸.比如:北京日报.人民日报.这些报纸就相当于发布订阅模型中的topic.如 ...

  2. 深入浅出 JMS(一) - JMS 基本概念

    深入浅出 JMS(一) - JMS 基本概念 一.JMS 是个什么鬼 JMS 是 Java Message Service 的简称,即 Java 消息服务.什么是消息服务呢,我们来看一下 Oracle ...

  3. 深入浅出JMS(一)--JMS基本概念

     from:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 深入浅出JMS(一)--JMS基本概念 标签: jmsmessagin ...

  4. 基于Netty打造RPC服务器设计经验谈

    自从在园子里,发表了两篇如何基于Netty构建RPC服务器的文章:谈谈如何使用Netty开发实现高性能的RPC服务器.Netty实现高性能RPC服务器优化篇之消息序列化 之后,收到了很多同行.园友们热 ...

  5. 基于kryonet的RPC,使用kryo进行序列化

    Kryo是一个序列化框架. Kryonet是一个基于kryo的RPC框架,它实现了一套高效简洁的API,它通过NIO实现了TCP和UDP通讯,目前还不支持Http. 自己写了一个测试代码,运行了下,感 ...

  6. github上的golang双向rpc,基于原生“net/rpc”库实现,可以注册回调

    github上的golang双向rpc,基于原生“net/rpc”库实现,可以注册回调.仅支持一个server和一个client交互. 地址:https://github.com/rocket049/ ...

  7. 基于Netty的RPC简易实现

    代码地址如下:http://www.demodashi.com/demo/13448.html 可以给你提供思路 也可以让你学到Netty相关的知识 当然,这只是一种实现方式 需求 看下图,其实这个项 ...

  8. 这样基于Netty重构RPC框架你不可能知道

    原创申明:本文由公众号[猿灯塔]原创,转载请说明出处标注 今天是猿灯塔“365天原创计划”第5天. 今天呢!灯塔君跟大家讲: 基于Netty重构RPC框架 一.CyclicBarrier方法说明 1. ...

  9. spring整合JMS - 基于ActiveMQ实现

    一. 开篇语 继上一篇apache ActiveMQ之初体验后, 由于近期一直在复习spring的东西, 所以本文就使用spring整合下JMS. 二. 环境准备 1. ActiveMQ5.2.0 ( ...

随机推荐

  1. tail()和head()

    pandas 里的tail() 函数,读取后几行. head() dataframe.head():前五行 显示某一列的前五行,两种方法: 或者:

  2. 514. Freedom Trail

    In the video game Fallout 4, the quest "Road to Freedom" requires players to reach a metal ...

  3. drf 三级菜单后台序列化以及数据库的设计

    第一种, model.py结构: class GoodsCategory(models.Model): """ 商品类别 """ CATEG ...

  4. SP16580 QTREE7 - Query on a tree VII(LCT)

    题意翻译 一棵树,每个点初始有个点权和颜色(输入会给你) 0 u:询问所有u,v路径上的最大点权,要满足u,v路径上所有点颜色相同 1 u:反转u的颜色 2 u w:把u的点权改成w 题解 Qtree ...

  5. django2使用xadmin打造适合国人的后台管理系统(1)

    python火了之后,学习python的人也越来越多了,python做web开发的话,flask.django是比较火的框架了,django是一个比较大的框架,也是一个快速开发利器.但是,django ...

  6. centos下部署NFS

        一. NFS简介   NFS---Network File System:主要功能是通过网络让不同的linux主机系统间可以彼此共享文件和目录.NFS客户端可以通过挂载的方式将NFS服务器端共 ...

  7. Ping程序

    一.概述 Ping程序是对两个TCP/IP系统连通性进行测试的基本工具.该程序发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答. 二.格式 大多数TCP/IP实现都在内核中直接支持Pin ...

  8. 10分钟教你用Python实现微信自动回复

    01 前言&&效果展示 相信大家都有忙碌的时候,不可能一直守在微信上及时回复消息.但微信又不能像QQ一样设置自动回复.无妨,今天,我们就来用Python实现微信的自动回复功能吧,并且把 ...

  9. typescript项目中import 图片时报错:TS2307: Cannot find module ‘...’

    最近在用typescript写项目时,我用import来加载一个图片,webpack编译文件是会报错如下: 报错: 解决: 如果在js中引入本地静态资源图片时使用import img from './ ...

  10. 洛谷P5156 [USACO18DEC]Sort It Out

    这题就是让你求字典序第k小的最短乱序子序列 转换一下,其实就是字典序第k大的最长上升子序列 就统计一下以i结尾的最长上升子序列\(f[i]\),长度为i的上升子序列的开头组成的集合\(v[i]\),转 ...