activeMq同步于异步

一、jms规范的异步性 
我们先来看一下同步和异步的概念,jms本身是异步的,但是activemq也可以以同步方式轮询访问生产者的数据。 异步:两个通信应用之间可以不用同时在线等待,任何一方只需各自处理自己的业务,比如发送方发送消息以后不用登录接收方的响应,可以接着处理其他的任务。也就是说发送方和接收方都是相互独立存在的,发送方只管方,接收方只能接收,无须去等待对方的响应。 
同步:两个通信应用服务之间必须要进行同步,两个服务之间必须都是正常运行的。发送程序和接收程序都必须一直处于运行状态,并且随时做好相互通信的准备。发送程序首先向接收程序发起一个请求,称之为发送消息,发送程序紧接着就会堵塞当前自身的进程,不与其他应用进行任何的通信以及交互,等待接收程序的响应,待发送消息得到接收程序的返回消息之后会继续向下运行,进行下一步的业务处理。 
jms是异步通信,发送方发送消息后就可以继续其它业务,而不用阻塞等等接收方响应。但接收方在接收消息上有两种模式:一种是同步接收消息,一种是异步接收消息。下面的示例中也会分别演示

  • 同步接收消息:接收者主动接收消息,若消息队列中没有消息则阻塞等待,当然也有其它方法可以规定等待时间或是不等待。
  • 异步接收消息:当消息队列有消息时会调用接收者的onMessage方法,接收者不用阻塞等待,可执行其它业务。 
    二、消息模型 
    jms支持两类消息传输模型:点对点模型(p2p)和发布/订阅模型(pub/sub) 
    1、p2p模型 
    p2p模型 
    点对点消息传送模型允许JMS客户端通过队列(queue)和这个虚拟通道来同步和异步发送、接收消息。消息生产者称为发送者(sender),消息消费者称为接收者(receiver)。传统上,点对点模型是一个基于拉取(pull)或轮询(polling)的消息传送模型,这种模型从队列中请求消息,而不是自动地将消息推送到客户端。 
    特点: 
    (1)发送到队列的消息被一个而且仅仅一个接收者所接收; 
    (2)队列保留信息,只到被消费或超时,接收者可用离线,上线时可消费消息。 
    (3)一旦消息被消费,就不会在队列中; 
    2、Pub/Sub模型 
    Pub/Sub模型 
    在发布/订阅模型中,消息会被发布到一个名为主题(topic)的虚拟通道中。消息生产者称为发布者(Publisher),而消息消费者称为订阅者(subscriber)。与点对点模型不同,使用发布/订阅模型发布到一个主题的消息,能够由多个订阅者所接收。有时候,也称这项技术为广播(broadcasting)消息。每个订阅者会接收到每条消息的一个副本。总的来说,发布/订阅消息传送模型基本上是一个基于推送(push)的模型,其中消息自动地向消费者广播,无需请求或轮询主题来获得新消息。 
    特点: 
    (1) 每个消息可以有多个消费者 
    (2)发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。 
    (3)为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。 
    三、点对点模型示例 
    1、下载activemq,有window和linux两个版本,此处为linux版本 
    2、解压文件,得到以下目录: 
    这里写图片描述 
    3、启动:到bin目录下,有三种启动方式 
    1) 普通启动 ./activemq start 
    2) 启动并指定日志文件 ./activemq start >tmp/smlog 
    3) 后台启动方式nohup ./activemq start >/tmp/smlog 
    运行截图如下: 
    这里写图片描述
    4、ActiveMQ自带了一套管理系统,访问http://ip:8161/admin/,输入用户名密码即可登录: 
    这里写图片描述
    5、实现,登录管理器后我们可以新建队列、topic,但为了更好理解Activemq,我们在程序中实现新建队列、topic。 
    首先新建一个生产者类(ActivemqQueueProducer.java),代码如下:

案例:https://www.cnblogs.com/parryyang/p/6062160.html

猜你喜欢

转载自blog.csdn.net/dhq_blog/article/details/82955534
今日推荐