`
m635674608
  • 浏览: 5004019 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

ActiveMQ结合WebScoket应用例子以及介绍

    博客分类:
  • java
 
阅读更多

一、ActiveMQ的介绍?

1.JMS基础概念

JMS(java Message Service) 即使java消息服务,它提供标准的产生、发送、接收的接口简化企业应用开发,它支持两种消息通信模型:点到点(point-to-point)(P2P) 模型和发布/订阅模型。P2P模型规定了一个消息只能有一个接受者,Pub/Sub 模型允许一个消息可以有多个接受者。

 对于点到点模型,消息生产者产生一个消息后,把這个消息发送到一个Queue(队列)

中,然后消息接收者再从這个Queue中读取数据,一旦消息被接受者读取之后,他就在Queue中消失了,所以一个消息只能被一个接受者消费。

与点到点模型不同,发布/订阅模型中,消息生产者产生一个消息后把這个消息发送到一个Topic中,這个Topic可以同时有多个接受者在监听,当一个消息到达這个Topic之后,所有消息接受者都会收到這个消息。

2.编程的结构

  2.1消息产生者向JMS发送消息步骤如下

(1)创建连接使用的工厂类JMS ConnectionFactory

(2)使用管理对象JMS ConnectionFactory建立连接Connection

(3)使用连接Connection建立会话Session

(4)使用会话Session和管理对象Destination 创建消息生产者MessageSender

(5)使用消息生产者MessageSender发送消息

  2.2消息消费者从JMS接收消息的步骤如下

     (1)创建连接使用的工厂类JMS ConnectionFactory

     (2)使用管理对象JMS ConnectionFactory建立连接Connection

     (3)使用连接建立会话Session

     (4)使用会话Session和管理对象Destination创建消息消费者MessageReceiver

     (5)使用消息消费者MessageReceiver接受消息,需要用setMessageListener将MessageListener接口绑定到MessageReceiver

        消息消费者必须实现了MessageListener接口,需要定于onMessage时间方法。

 

3.ActiveMQ的下载地址:

     下载地址:http://activemq.apache.org/download.html

      下载到本地的目录结构为:

 

 

 

进入bin目录下

 

 

根据自己的系统位数来执行目录下的

 

 

双击让他跑起来,效果如下

 

 

    

     

二、ActiveMQ能干嘛,好处是什么

activemq有自己的特点和优势:

(1)activemq可以很好的运行在任何JVM上,而不只是集成到JBoss的应用服务器中;

(2)activemq支持大量的跨语言客户端;

(3)activemq支持许多不同的协议,如Ajax,REST,Stomp,OpenWire,XMPP

(4)activemq支持许多高级功能,例如MessageGroups,ExclusiveConsumer,CompositeDestinations

(5)AdvisoryMessage

(6)activemq支持可靠连接并且具有可配置的自动重连接

(7)activemq对spring有很好的支持

(8)activemq支持跨网络的分布式目的地

(9)activemq是速度非常快;一般要比jbossmq快10倍

 

三、ActiveMQ一般应用到什么场景

  ActiveMQ 使用场景

1.非均匀应用集成

         ActiveMQ 中间件用Java语言编写,因此自然提供Java客户端 API。但是ActiveMQ  也为C/C++、.NET、Perl、PHP、Python、Ruby 和一些其它语言提供客户端。在你考虑如何集成不同平台不同语言编写应用的时候,ActiveMQ 拥有巨大优势。在这样的例子中,多种客户端API通过ActiveMQ 发送和接受消息成为可能,无论使用的是什么语言。此外,ActiveMQ 还提供交叉语言功能,该功能整合这种功能,无需使用远程过程调用(RPC)确实是个优势,因为消息协助应用解耦。

 

2.作为RPC的替代

         应用使用RPC分格同步调用十分普遍。假设大多数客户端服务器应用使用RPC,包括ATM、大多数WEB应用、信用卡系统、销售点系统等等。尽管很多系统很成功,转换使用异步消息可以带来很多好处,而且也不会放弃响应保证。系统依赖同步需求典型地限制了扩展,因为最终需求将开始起作用,从而放慢整个系统。取而代之这种不好的体验,使用异步消息,附加的消息接收器可以轻松添加,假设你的应用可以解耦。

 

3.两个应用之间解耦

         正如之前讨论的,紧耦合架构可以导致很多问题,尤其是如果他们是分布的。松耦合架构,在另一方面,证实了更少的依赖性,能够更好地处理不可预见的改变。你不见可以在系统中改变组件而不影响整个系统,而且组件交互也相当的简单。取代使用同步方案的组件交互,组件利用异步通信。这样的松耦合遍及系统被称之为事件驱动架构(EDA)。

 

4.作为事件驱动架构的主干

         在之前的观点中,解耦、异步风格架构允许软件本身进一步扩展(水平的可扩展性),而不是依赖硬件的可扩展性(垂直的可扩展)。想象一下一种难以置信的流量、电子商务网站像亚马逊。但一个用户在亚马逊上购买,有许多分开的阶段贯穿,订单需要履行包括订单配置、创建发票、支付流程、订单完成、运输等。然而,但一个用户实际上提交了一个订单,用户立即得到一个页面说明,“感谢您的订单”不仅如此,没有任何延迟。用户也收到了订单已经收到的邮件说明,订单配置流程由亚马逊雇佣就是个很好的例子,第一步在一种更大的、异步流程中。每一个订单步骤直接由分开的服务奋力地处理。但用户下了订单,异步调用提交订单,但是全部订单流程不会落后于通过网页浏览器进行的同步调用。反之,订单被接受并立即被确认。这个流程中剩余的步骤一步地被处理。如果发生了问题。组织流程进行,用户会被通知。这样的异步流程提供大量的可扩展性。

 

5.改善应用可扩展性

         许多应用利用事件驱动架构,为了提供大量的可扩展性,包括像电子商务、政府、制造业和在线游戏等领域。使用异步消息在业务领域分离一个应用,许多其它可能性开始合并。考虑使用服务为特定任务设计应用的能力。这正是面向服务架构(SOA)的主干。每一个服务实现一个独立的功能,而且只是那个功能。应用通过这些服务构成来创建,在服务间使用异步消息实现通信。这种风格的应用设计被称之为复杂事件处理(CEP)。使用CEP,系统中组件之间的交互可以被进一步的分析跟踪。在考虑异步消息在系统的组件之间添加一种迂回的时候,这些可能性是无止境的。

四、连接使用案例

生产者:

package com.xuwei.activemq;

 

import javax.jms.Connection;

import javax.jms.ConnectionFactory;

import javax.jms.DeliveryMode;

import javax.jms.Destination;

import javax.jms.MessageProducer;

import javax.jms.Session;

import javax.jms.TextMessage;

import org.apache.activemq.ActiveMQConnection;

import org.apache.activemq.ActiveMQConnectionFactory;

 

public class Sender {

    private static final int SEND_NUMBER = 5;

 

    public static void main(String[] args) {

        // ConnectionFactory :连接工厂,JMS 用它创建连接

        ConnectionFactory connectionFactory;

        // Connection :JMS 客户端到JMS Provider 的连接

        Connection connection = null;

        // Session: 一个发送或接收消息的线程

        Session session;

        // Destination :消息的目的地;消息发送给谁.

        Destination destination;

        // MessageProducer:消息发送者

        MessageProducer producer;

        // TextMessage message;

        // 构造ConnectionFactory实例对象,此处采用ActiveMq的实现jar

        connectionFactory = new ActiveMQConnectionFactory(

                ActiveMQConnection.DEFAULT_USER,

                ActiveMQConnection.DEFAULT_PASSWORD,

                "tcp://localhost:61616");

        try {

            // 构造从工厂得到连接对象

            connection = connectionFactory.createConnection();

            // 启动

            connection.start();

            // 获取操作连接

            session = connection.createSession(Boolean.TRUE,

                    Session.AUTO_ACKNOWLEDGE);

            // 获取session注意参数值xingbo.xu-queue是一个服务器的queue,须在在ActiveMq的console配置

            destination = session.createQueue("FileQueue");

            // 得到消息生成者【发送者】

            producer = session.createProducer(destination);

            // 设置不持久化,此处学习,实际根据项目决定

            producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

            // 构造消息,此处写死,项目就是参数,或者方法获取

            sendMessage(session, producer);

            session.commit();

        } catch (Exception e) {

            e.printStackTrace();

        } finally {

            try {

                if (null != connection)

                    connection.close();

            } catch (Throwable ignore) {

            }

        }

    }

 

    public static void sendMessage(Session session, MessageProducer producer)

            throws Exception {

        for (int i = 1; i <= SEND_NUMBER; i++) {

            TextMessage message = session

                    .createTextMessage("ActiveMq 发送的消息" + i);

            // 发送消息到目的地方

            System.out.println("发送消息:" + "ActiveMq 发送的消息" + i);

            producer.send(message);

        }

    }

}

 

 

可以看到ActiveMQ以成功的向FileQueue队列发送了五条数据

 

 

 

Web端使用websocket连接ActiveMQ:

需要导入:stop.js

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Insert title here</title>

<script type="text/javascript" src="stomp.js"></script>

</head>

<body>

<script type="text/javascript">

var url = "ws://localhost:61614/stomp"; 

var login = "admin";

var passcode = "admin";

//监听的队列

//需要和发送者的发送的队列名称一致否则无法接受到数据

destination = "FileQueue";

client = Stomp.client(url);

var onconnect = function(frame) {

  client.subscribe(destination, function(message) {

     console.log(message.body);

         alert(message.body);        

  });

};

client.connect(login, passcode, onconnect);

</script>

</body>

</html>

 

 

效果如下:

  

 

http://www.cnblogs.com/guohuide/p/7204486.html

分享到:
评论

相关推荐

    SpringBoot整合ActiveMQ+websocket.docx

    8. **整合WebSocket与ActiveMQ**:为了将WebSocket与ActiveMQ结合,我们需要在WebSocket配置中设置STOMP作为传输协议,并配置一个Broker URL指向ActiveMQ服务器。客户端通过WebSocket连接到服务器,然后通过STOMP...

    springboot使用websocket的js文件

    在WebSocket应用中,jQuery可以帮助我们更方便地操作DOM元素,处理页面事件,以及发起Ajax请求。 `sockjs.min.js`是SockJS的压缩版本,包含了所有实现WebSocket兼容性的功能。它在浏览器端创建一个WebSocket-like的...

    WebSocket的两种简单实现

    在实际应用中,我们经常结合服务器端框架来实现WebSocket。Spring Boot是一个流行的Java后端框架,它提供了对WebSocket的全面支持。Spring的WebSocket库包含了STOMP(Simple Text Oriented Messaging Protocol)的...

    activemq 通过ajax发送接收消息简单例子

    在Web应用中,将ActiveMQ与Ajax结合使用,可以实现Web客户端与服务器之间的异步通信,提高用户体验。 在这个简单的例子中,我们将探讨如何利用Ajax与ActiveMQ交互,发送和接收消息。首先,你需要在服务器端设置一个...

    代码DEMO websocket mq redis pdf

    WebSocket、消息队列MQ以及Redis是现代Web应用中常见的三个技术组件,它们在构建高性能、实时和可扩展的系统中发挥着关键作用。下面将详细解释这三个技术,并结合Java编程语言,探讨它们如何协同工作。 WebSocket是...

    spring boot websocket , mongoDBd存文件 图片服务器

    总结起来,本文介绍了如何使用Spring Boot搭建WebSocket服务器,实现广播和点对点通信,并集成MongoDB的GridFS进行文件存储,特别适用于图片服务器场景。同时,我们也讨论了非GridFS的文件存储方式及其16MB的限制。...

    activemq-transport-http-1.4.jar.zip

    Apache ActiveMQ是开源社区中最流行的Java消息代理,它支持多种消息协议,包括开放消息传递应用接口(Open Message Passing Interface, JMS)和高级消息队列协议(Advanced Message Queuing Protocol, AMQP)。...

    stomp:WebSocket广播-带STOMP

    STOMP使得WebSocket能够与各种消息中间件进行交互,比如RabbitMQ、ActiveMQ等。 标题"stomp:WebSocket广播-带STOMP"暗示我们将讨论如何利用WebSocket和STOMP实现广播通信。在Web应用中,广播通信通常指的是服务器向...

    scokjs.min.js及stomp.min.js

    WebSocket是Web应用中实现实时通信的关键技术,它提供了一种持久化的、低延迟的双向通信通道,使得服务器和客户端能够实时交换数据而无需反复建立和关闭连接。在本压缩包中,包含两个重要的JavaScript库——`scokjs....

    sockjs.min.js和stomp.min.js

    在IT行业中,Socket编程是一种广泛应用于实时数据交互的网络通信技术,特别是在构建实时Web应用程序时。标题中的"sockjs.min.js"和...开发者可以结合这些库,配合Java后端的WebSocket支持,构建出强大的实时Web服务。

    jquery+sockjs+stomp亲试可用.rar

    在这种背景下,jQuery、SockJS和STOMP这三种技术结合使用,为开发者提供了跨浏览器的WebSocket兼容解决方案。下面我们将详细探讨这三个关键词及其相互配合的工作方式。 首先,jQuery是一个广泛使用的JavaScript库,...

    sockjs.min.js+stomp.min.js

    总的来说,`sockjs.min.js` 和 `stomp.min.js` 的结合使用,使得Web开发者能够在不考虑底层通信细节的情况下,轻松地构建具备实时通信功能的应用。这种技术广泛应用于聊天应用、股票交易、在线游戏等多种场景,极大...

    springboot消息中间件 redis缓存 mybatis-plus jp-spring-boot-demo.zip

    以下是对这些技术及其在项目中的应用进行的详细解释。 1. **Spring Boot**:Spring Boot是由Pivotal团队提供的全新框架,其设计目标是简化Spring应用程序的初始搭建以及开发过程。它集成了大量常用的第三方库配置,...

    计算机的毕业论文题目大全.pdf

    计算机毕业论文涵盖了广泛的IT主题,主要集中在编程语言如Java、Web开发、移动应用以及系统设计。以下是一些可能的论文题目及其相关知识点的详细说明: 1. **基于Web的网站和管理系统**: - Web开发技术:HTML, ...

    stomp-service:订阅 Stomp 服务器即服务的类

    在IT行业中,Stomp是一种简单可移植的网络协议,用于在客户端和服务器之间进行消息传递。...在实际项目中,结合具体的业务场景,对`stomp-service`进行适当的调整和优化,可以极大地提升应用的性能和用户体验。

    JAVA上百实例源码以及开源项目源代码

    Java编写的显示器显示模式检测程序 2个目标文件 内容索引:JAVA源码,系统相关,系统信息检测 用JAVA编写了一个小工具,用于检测当前显示器也就是显卡的显示模式,比如分辨率,色彩以及刷新频率等。 Java波浪文字制作...

Global site tag (gtag.js) - Google Analytics