讲AMQP之前,先讲下传统的JMS的消息模型,JMS中主要有三个参与者:消息的生产者.消费者.传递消息的通道(队列或者主题),两种消息模型如下:通道是队列: 通道是队列: 通道是主题: 在JMS中,虽然通道有助于解耦消息的生产者和消费者,但这两者依然会与通道相耦合.生产者会将消息发布到一个特定的队列或主题上,消费者从特定的队列或主题上接收这些消息,通道具有双重责任,就是传递数据和确定这些消息该发送到什么地方,队列的话会使用点对点算法发送,主题的话就使用发布-订阅方式.而使用AMQP的话,生产者并…
上篇讲了使用RabbitMQ发送消息,本篇则来讲接收消息.在传统JMS中有两种从队列获取信息的方式,使用JmsTemplate的同步方式以及使用消息驱动pojo的异步方式.Spring AMQP也提供了类似的方式来获取通过AMQP发送的消息. 使用RabbitTemplate来接收消息 RabbitTemplate提供的接收信息的方法中最简单的就是receive()方法,通过该方法就可以从队列中获取一个Message对象: Message message = rabbit.receive("sp…
上篇讲了RabbitMQ连接工厂的作用是用来创建RabbitMQ的连接,本篇就来讲讲RabbitMQ的发送消息.通过RabbitMQ发送消息最简单的方式就是将connectionFactory Bean注入到服务层类中,并使用它创建Connection,使用这个Connection来创建Channel,再使用这个Channel发布消息到Exchange中. 当然Spring AMQP提供了RabbitTemplate来简便我们的操作,消除RabbitMQ发送和接收消息相关的样板代码.使用Rabb…
客户端连接上服务器并登录以后,可以发送.接收消息. 首先需要定义Chat,MessageListener和ChatMessageListener几个变量: private static Chat chat; private static MessageListener ml = new MessageListener(){ public void processMessage(Chat arg0, Message msg) { // 对消息的处理动作 } }; private static Ch…
为了能够模拟登陆QQ,并获取信息.对扫码登录微信进行了分析.简单的用了一下Django将获取的信息映射到页面上.(python3+pycharm) 主要过程就是: 1.获取二维码 2.扫码登录(有三种状态) 3.获取联系人信息(index页面获取的是个人信息.最近联系人信息.公众号) 4.获取所有的联系人 5.发送和接收消息(接收消息打印到了后台) 创建Django项目.导入JQuery(发送AJax请求).创建APP.创建模板(简单的弄一下,能合理显示得到的数据就好) url.py from…
1.安装Erlang和RabbitMq 在安装RabbitMq之前需要安装的Erlang(esl-erlang_22.0_windows_amd64.exe): https://pan.baidu.com/s/1_ExgTzvCRN0byIYXgiA16g 需要安装的RabbitMq(rabbitmq-server-3.7.18.exe):https://pan.baidu.com/s/10UuuukYibnpmm16RtUZw3Q 安装时这两个软件没有特殊设置,一路同意接受就行了. 2.开启R…
GCM 传递参数 最近用了很多时间做GCM,由于碰到很多问题,因此详细做一下记录,以方便各位网友,不用再走我的重复的路.不过我试了一下GCM在国内很不好用.假如开发国外的程序的话,用GCM倒是很不错的选择.国内基本上封得不成样子了,十个请求发出去,有一个相应就不错了,其他的九个都被长城防火墙拦住了. Google 的GCM最权威的当然是官网了.刚开始我照着官网做的,为了更完善一些,部分地方我直接用了网上的材料.红色的地方表示比较重要的地方. 1准备工作 1.要创建一个谷歌API项目: 打开谷歌A…
案例如下: 1.启动一个服务端套接字服务 2.启动一个客户端套接字服务 3.客户端向服务端发送一个hello,服务端则回复一个word,并打印 参考地址:https://www.cnblogs.com/xilouch/p/4618903.html 服务端代码: #coding:utf-8 import socket import time class Server: def __init__(self,host,port): self.port = port self.host = host s…
kafaka,生产者:./kafka-console-producer.sh --broker-list localhost:9092 --topic testTopic 消费者:./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testTopic --from-beginning…
spring 顶级项目:Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作了.Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署.Spring Framework:即通常所说的spring 框架,是一个开源的Java/Java EE全功能栈应用程…
一.Spring使用JmsTemplate简化对JMS的访问 在JAVA对JMS队列访问中,使用默认的JMS支持将存在大量的检查型异常.通过Spring的支持,可以将所有的JMS的检查型异常转换为运行时非检查异常.以及在Spring中,通过配置JMSConnectionFactory的DefaultDestinationName指定发送和接收目的地. 下面是ActiveMQ的连接factory配置: @Bean public ActiveMQConnectionFactory getAMQFac…
在使用 Spring AMQP 发送消息到 RabbitMQ 的时候收到错误信息: inequivalent arg 'x-queue-type' for queue 'com.ossez.real.estate' in vhost '/': received none but current is the value 'classic' of type 'longstr', class-id=50, method-id=10 上面的错误信息已经很明显了,说明的是发送消息的队列参数中少了 x-q…
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 前言 Spring Cloud Stream专门用于事件驱动的微服务系统,使用消息中间件来收发信息.使用Spring Cloud Stream可专注于业务开发,而不用花太多心思在应用与MQ之间的交互上.而且,在切换MQ后,也无须做太多的代码改动. 本文将整合Spring Cloud Stream和RabbitMQ,以实现消息收发. 2 整合过程 2.1 添加依赖 <dependency> <groupId&…
http://blog.csdn.net/zhu_tianwei/article/details/40919249 实现使用Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称.注解实现异步发送消息. 1.生产者配置ProducerConfiguration.Java package cn.slimsmart.rabbitmq.demo.spring.async; import java.util.concurrent.atomic.Atomic…
http://blog.csdn.net/zhu_tianwei/article/details/40919031 实现使用Exchange类型为DirectExchange. routingkey的名称默认为Queue的名称.异步发送消息. 1.配置文件 #============== rabbitmq config ==================== rabbit.hosts=192.168.36.102 rabbit.username=admin rabbit.password=ad…
queue类型消息 pom依赖 <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.activem…
一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿级数据洪峰,创造了全球最大的业务消息并发以及流转纪录(日志类消息除外): 在始终保证高性能前提下,支持亿级消息堆积,不影响集群的正常服务,在削峰填谷(蓄洪).微服务解耦的场景下尤为重要:这,就能说明RocketMQ的强大. 二.RocketMQ的特点和优势(可跳过看三的整合代码) 削峰填谷(主要解决…
一,为什么要用延时消息来取消订单? 1,为什么要取消订单 在电商的下单过程中,需要在生成订单时扣减库存, 但有可能发生这种情况:用户下了单,临时改变主意不再支付, 则订单不能无限期的保留,因为还要把占用的库存数量释放出来, 所以通常会在用户下单后半小时(或其他时长)把未支付的订单取消不再保留. 2,取消订单的方法: 通常我们会在crond中创建一个定时运行的任务,每1分钟执行一次, 把下单时间超过半小时的取出来,检查订单状态是否还是未支付, 如果仍未支付,则修改订单状态为无效,同时把库存数量加回…
spring JMS在接收消息的时候总是报错 org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is javax.jms.JMSException: Unexpected error occured at org.springframework.jms.support.JmsUtils.convertJ…
Spring Cloud Stream是一个用来为微服务应用构建消息驱动能力的框架.它可以基于Spring Boot来创建独立的.可用于生产的Spring应用程序.它通过使用Spring Integration来连接消息代理中间件以实现消息事件驱动的微服务应用.Spring Cloud Stream为一些供应商的消息中间件产品提供了个性化的自动化配置实现,并且引入了发布-订阅.消费组以及消息分区这三个核心概念.简单的说,Spring Cloud Stream本质上就是整合了Spring Boot…
微服务框架Spring Cloud介绍 Part1: 使用事件和消息队列实现分布式事务 http://skaka.me/blog/2016/04/21/springcloud1/ APR 21ST, 2016 11:21 AM | COMMENTS 不同于单一架构应用(Monolith), 分布式环境下, 进行事务操作将变得困难, 因为分布式环境通常会有多个数据源, 只用本地数据库事务难以保证多个数据源数据的一致性. 这种情况下, 可以使用两阶段或者三阶段提交协议来完成分布式事务.但是使用这种方…
spring +ActiveMQ 实战 topic selecter指定接收 queue:点对点模式,一个消息只能由一个消费者接受 topic:一对多,发布/订阅模式,需要消费者都在线(可能会导致信息的丢失) 看了网上很多的文件,但大都是不完整的,或不是自己想要的特异性接受功能,特意研究了一下,总结总结 一,下载并安装ActiveMQ 首先我们到apache官网上下载activeMQ(http://activemq.apache.org/download.html),进行解压后运行其bin目录下…
1.引入依赖 pom.xml 1 <!-- activemq --> 2 <dependency> 3 <groupId>org.springframework</groupId> 4 <artifactId>spring-jms</artifactId> 5 <version>4.3.23.RELEASE</version> 6 </dependency> 7 8 <dependency&g…
spring boot / cloud (十九) 并发消费消息,如何保证入库的数据是最新的? 消息中间件在解决异步处理,模块间解耦和,和高流量场景的削峰,等情况下有着很广泛的应用 . 本文将跟大家一起讨论以下其中的异常场景,如题. 场景 在实际工作中,大家可能也都遇到过这样的需求 : 如 : 系统A中的某些重要的数据,想在每次数据变更的时候,将当前最新的数据备份下来,当然,这个备份的动作不能影响当前数据变更的进程. 也更不期望因为备份的操作,影响当前进程的性能. 分析 这是一个比较常见的,可以异…
    消息队列(MQ)越来越火,在java开发的项目也属于比较常见的技术,MQ的相关使用也成java开发人员必备的技能.笔者公司采用的MQ是ActiveMQ,且消息都是用的点对点的模式.本文记录了实现Spring整合ActivateMQ的全过程及如何使用MQ,便于后续查阅. 一.项目的搭建     采用maven构建项目,免去了copy jar包的麻烦.因此,我们创建了一个java类型的Maven Project (1)项目结构图     先把项目结构图看一下,便于对项目的理解.      …
1.为什么使用信道(channel)而不使用TCP连接发送AMQP命令? 对操作系统来说频繁的建立和销毁TCP连接开销非常昂贵,而操作系统每秒建立的连接是有上限的,性能瓶颈不可避免,而只建立一条TCP连接无疑是一个很好的方案,在这条连接当中建立多条信道与RabbitMQ进行私密通信,相当于光纤电缆一样,一条电缆有多条光束,信道是没有限制的 2.队列 1)AMQP的命令basic.consume与basic.get 如果需要消息一到达队列就自动接收的话,应该使用basic.consume basi…
1.简介 RabbitMQ是消息代理:它接受和转发消息.你可以把它当作一个邮局:当你把你要邮寄的邮件放在信箱里时,你可以肯定Postman先生最终会把邮件送到你的收件人那里.在这个比喻中,RabbitMQ是邮局,邮局邮差.RabbitMQ和邮局之间的主要区别是,它不处理纸张,而是接受.存储和转发二进制数据‒消息. 整体的设计如下图: java环境下,使用rabbitmq需要用到jar包:amqp-client.jar 2.发送消息 想要将消息发送到队列中,我们需要进行下面几步: (1)建立服务链…
应用场景 有的时候,我们对于同一通道中的消息处理,会通过判断头信息或者消息内容来做一些差异化处理,比如:可能在消息头信息中带入消息版本号,然后通过if判断来执行不同的处理逻辑,其代码结构可能是这样的: @StreamListener(value = TestTopic.INPUT) public void receiveV1(String payload, @Header("version") String version) { if("1.0".equals(ve…
在上一篇中,当一个配置中心的客户端启动之后,它所引用的值就无法改变了,但是Spring Cloud 提供了一种手段去解决了这个问题--Spring Cloud Bus. 一.Spring Cloud Bus 先贴出官方文档对消息总线的介绍 Spring Cloud Bus links the nodes of a distributed system with a lightweight message broker. This broker can then be used to broadc…
安装环境:Activemq5.11.1, jdk1.7(activemq5.11.1版本需要jdk升级到1.7),虚拟机: 192.168.147.131 [root@localhost software]# pwd /export/software [root@localhost software]# -bin.tar.gz [root@localhost software]# /usr/local 配置Nginx代理Activemq后台管理应用默认绑定的8161端口 upstream tom…