Raabbitmq简介

1、AMQP
AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。Erlang中的实现有 RabbitMQ等。

2、RabbitMQ
1、Erlang语言
Erlang是一种通用的并发程序设计语言,它由乔·阿姆斯特朗(Joe Armstrong)在瑞典电信设备制造商爱立信所辖的计算机科学研究室开发,目的是创造一种可以应付大规模开发活动的程序设计语言和运行环境。Erlang于1987年发布正式版本,最早是爱立信拥有的私有软件,经过十年的发展,于1998年发表开放源代码版本。

Erlang是运作于虚拟机的解释型语言,但是现在也包含有乌普萨拉大学高性能Erlang计划(HiPE)[3]开发的原生代码编译器,自R11B-4版本开始,Erlang也支持脚本方式执行。在编程范型上,Erlang属于多重典范编程语言,涵盖函数式、并行及分布式。循序运行的Erlang是一个及早求值, 单次赋值和动态类型的函数式编程语言。

2、消息队列(Message Queue)
在计算机科学中,消息队列(英语:Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列交互。消息会保存在队列中,直到接收者取回它。

实际上,消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。
目前,有很多消息队列有很多开源的实现,包括JBoss Messaging、JORAM、Apache ActiveMQ、Sun Open Message Queue、RabbitMQ、IBM MQ、Apache Qpid和HTTPSQS。

3、RabbitMQ简介
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。

RabbitMQ支持以下操作系统:

Windows
Linux/Unix
MAC OS X
RabbitMQ支持下列编程语言:

C# (using .net/c# client)
clojure (using Langohr)
erlang (using erlang client)
java (using java client)
javascript/node.js (using amqp.node)
perl (using Net::RabbitFoot)
python (using pika)
python-puka (using puka)
ruby (using Bunny)
ruby (using amqp gem)
RabbitMQ官网:http://www.rabbitmq.com/

3、RabbitMQ安装
运用docker安装rabbitmq

下载安装rabbitmq:docker pull registry.docker-cn.com/library/rabbitmq:3.6-management
启动rabbitmq:docker run -d -p 5672:5672 -p15672:15672 --name myrabbitmq 01d6274c2217
5672:默认的客户端连接的端口
15672:默认的web管理界面的端口

访问 http://192.168.58.128:15672

默认账号密码都为guest

1、核心概念
Message :消息,消息是不具名的,它由消息头和消息体组成。消息体是不透明的,而消息头则由一系列的可选属性组成,这些属性包括routing-key(路由键)、 priority(相对于其他消息的优先权)、 delivery-mode(指出
该消息可能需要持久性存储)等。

Publisher:消息的生产者,也是一个向交换器发布消息的客户端应用程序

Exchange:交换器,用来接收生产者发送的消息并将这些消息路由给服务器中的队列。Exchange有4种类型: direct(默认), fanout, topic, 和headers,不同类型的Exchange转发消息的策略有所区别

Queue:消息队列,用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者连接到这个队列将其取走。

Binding:绑定,用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息队列连
接起来的路由规则,所以可以将交换器理解成一个由绑定构成的路由表。Exchange 和Queue的绑定可以是多对多的关系。
Connection:网络连接,比如一个TCP连接。
Channel:信道,多路复用连接中的一条独立的双向数据流通道。信道是建立在真实的TCP连接内的虚拟连接, AMQP 命令都是通过信道发出去的,不管是发布消息、订阅队列还是接收消息,这些动作都是通过信道完成。因为对于操作系统来说建立和销毁 TCP 都是非常昂贵的开销,所以引入了信道的概念,以复用一条 TCP 连接。
Consumer:消息的消费者,表示一个从消息队列中取得消息的客户端应用程序。
Virtual Host:虚拟主机,表示一批交换器、消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,拥有自己的队列、交换器、绑定和权限机制。 vhost 是 AMQP 概念的基础,必须在连接时指定,RabbitMQ 默认的 vhost 是 / 。

rabbitmq消息队列–使用

1.application.yml配置文件—配置信息

spring:rabbitmq:host: 192.168.58.128port: 5672username: guestpassword: guestvirtual-host: /
server:port: 8090

2.主启动类@SpringBootApplication中

package com.tjetc;import org.springframework.amqp.core.Queue;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.web.client.ResponseErrorHandler;
import org.springframework.web.client.RestTemplate;import java.io.IOException;@SpringBootApplication
public class RabbitmqApplication {public static void main(String[] args) {SpringApplication.run(RabbitmqApplication.class, args);}@Beanpublic Queue queue(){return new Queue("msg");}
}

3.控制层—HelloController

package com.tjetc.comtronller;import netscape.javascript.JSObject;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.client.RestTemplate;
import com.alibaba.fastjson.JSONObject;import java.util.Date;@Controller
public class HelloController {@Autowiredprivate RabbitTemplate rabbitTemplate;@Autowiredprivate RestTemplate restTemplate;@RequestMapping("/hello")@ResponseBodypublic String hello(){//实现跨域请求--访问数据库HttpHeaders httpHeaders = new HttpHeaders();MediaType mediaType = MediaType.parseMediaType("application/json;charset=UTF-8");httpHeaders.setContentType(mediaType);//访问地址(测试)String url="http://localhost:8083/2021_BYSJ/admin/find?id=12";HttpEntity<Object> entity = new HttpEntity<>(httpHeaders);ResponseEntity<JSONObject> jsObjectResponseEntity = restTemplate.postForEntity(url, entity, JSONObject.class);//根据自身情况,转换成不同形式的 ----  对象数据//ResponseEntity<Admin> jsObjectResponseEntity = restTemplate.postForEntity(url, entity, Admin.class);//Admin admin= jsObjectResponseEntity.getBody();JSONObject jsonObject = jsObjectResponseEntity.getBody();System.out.println("jsonObject = " + jsonObject);String msg="hello:"+new Date();rabbitTemplate.convertAndSend("msg",msg);return "发送的消息是:"+jsonObject;}
}

4.配置类—config

(1).MyAMQConfig

package com.tjetc.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MyAMQConfig {@Beanpublic MessageConverter messageConverter(){return new Jackson2JsonMessageConverter();}}

(2).RabbitMQConfig

package com.tjetc.config;import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitMQConfig {@Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();factory.setConnectionFactory(connectionFactory);factory.setMessageConverter(new Jackson2JsonMessageConverter());return factory;}}

(3).跨域请求配置类-----RestTemplateConfig —注册bean----远程请求接口

package com.tjetc.config;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate(RestTemplateBuilder builder){return builder.build();}
}

5.实体类Admin

package com.tjetc.domain;
/** 后台管理员表* */public class Admin{private Integer id;private String name;//管理员姓名private String username;//用户名private String password;//登录密码private String photopath;//美图private Integer age;//年龄private String sex;//性别private String phone;//联系方式private String permission;//Permission setting 权限设置// LOCATION:超级管理员访问   IDENTITY:普通管理员访问public Admin() {System.out.println(" 对象被创建了.............");}@Overridepublic String toString() {return "Admin{" +"id=" + id +", name='" + name + '\'' +", username='" + username + '\'' +", password='" + password + '\'' +", photopath='" + photopath + '\'' +", age=" + age +", sex='" + sex + '\'' +", phone='" + phone + '\'' +", permission='" + permission + '\'' +'}';}
}

6.队列消息接收类----HelloRrceiver

package com.tjetc.receiver;import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class HelloRrceiver {@RabbitListener(queues = "msg")public void hello(String msg){System.out.println("Hello1接收到的msg = " + msg);}
}

rabbitmq消息队列--restTemplate实现跨域请求--获取JSON字符串相关推荐

  1. jQuery使用ajax跨域请求获取数据

    jQuery使用ajax跨域请求获取数据 跨域是我在日常面试中经常会问到的问题,这词在前端界出现的频率不低,主要原因还是由于安全限制(同源策略, 即JavaScript或Cookie只能访问同域下的内 ...

  2. ajax获得header信息,关于jquery ajax跨域请求获取response headers问题

    背景:最近项目jwt用户认证方式,关于jwt本人就不再赘述,大家可自行百度. jwt token基本流程是这样的: 用户使用用户名密码来请求服务器 服务器进行验证用户的信息 服务器通过验证发送给用户一 ...

  3. 跨域请求获取Solr json检索结果并高亮显示

    Solr提供了json格式的检索结果,然而在跨域的情况下如何调用呢?我们可以利用jquery提供的jsonp的方式获取Solr检索结果. <script type="text/java ...

  4. js跨域访问获取json数组并解析

    跨域访问需要在服务器端配置,客户端才能够访问 服务器端: <?php    //服务端返回JSON数据  $arr="[{'quesTitle':'关于专利申请','quesAskTi ...

  5. Springboot 使用restTemplate 进行跨域请求 response reqeust中首字母大写的问题

    请求第三方系统,调用第三方API时可能会遇到双方协商定义的响应体中某个字段的首字母为大写的情况: 响应体:{"PlannerId": test123,"Name" ...

  6. yii2 跨域请求配置_如何在SpringBoot应用中实现跨域访问资源和消息通信?

    允许跨域访问 CORS ( Cross Origin Resource Sharing,跨域资源共享)机制允许Web应用服务器进行跨域访问控制,从而使跨域数据传输得以安全进行.浏览器支持在API容器中 ...

  7. RabbitMQ消息队列(一)《Java-2021面试谈资系列》

    RabbitMQ RabbitMQ消息队列 一.中间件 1.什么是中间件 2.中间件技术及架构概述 3.消息中间件 1.消息中间件的分布式架构 2.消息中间件使用场景 3.常见的消息中间件 4.消息中 ...

  8. arcgis api for JavaScript _跨域请求

    arcgis api for JavaScript  中出现跨域请求是常见问题, 通常出现类似如下错误消息类似: XMLHttpRequest cannot load http://10.32.2.7 ...

  9. 前端跨域请求get_HTTP--跨域真的有这么难吗

    前言 以前写前端小项目的时候就听说过跨域这个词,什么 JSONP啊,CORS啊.感觉很高级,但是无奈项目太小没机会用上.今天就写篇博客总结一下常用的跨域操作. 为什么要跨域 一般来说写项目的时候都是自 ...

  10. ajax跨域请求原理,Ajax跨域请求的原理(图文教程)

    这篇文章主要为大家详细介绍了Ajax跨域请求的原理,Ajax怎么样做跨域请求?具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Ajax跨域请求的具体实现过程,供大家参考,具体内容 ...

最新文章

  1. torch.nn.Embedding()理解
  2. awk -f 分隔符 命令_Linux三剑客之awk
  3. linux下防火墙iptables原理及使用
  4. Win64 驱动内核编程-15.回调监控注册表
  5. boost::allocator_void_pointer
  6. 服务器的共享文件夹怎么隐藏,Server200服务器隐藏共享文件夹 隐藏共享文件的方法...
  7. ABP框架使用 Swagger
  8. 十三、实现Comparable接口和new ComparatorT(){ }排序的实现过程
  9. 如何将dataset中的值赋值给datatable_金融行业实战项目:如何理解业务?
  10. excel vba真正的动态数组实例-按需定义数组大小
  11. Python自动检测视频画面的旋转角度
  12. 解决 Error: Table './db_name/table_name' is marked as crashed and last (automatic?) repair
  13. typeof()用法及JS基本类型
  14. Oracle P6培训系列:13分配限制条件
  15. 黑马程序员-java学习笔记_整理黑马官网Java自学27天基础视频及笔记
  16. 计算机三级数据库要安装什么软件,计算机三级数据库技术题库app
  17. VSTO打包加载项 WPS可用 Advanced Installer
  18. 易优超级字典生成器 v3.35 下载
  19. html svg单击事件,html5 svg 中元素点击事件添加方法
  20. python 神经网络预测未来30天数据_使用LSTM循环神经网络的时间序列预测实例:预测未来的货币汇率...

热门文章

  1. 使用阿里云实现短信发送功能
  2. jbpm5.4 mysql_5.BDF2-JBPM4
  3. 系统越用越臃肿,你需要的系统瘦身技巧.
  4. 新唐MCU之UART软硬件调试过程记录及总结
  5. 苹果6S怎么录屏_苹果6s来电没声音怎么回事
  6. Visual Studio 2015 TeamWork With TFS2015
  7. 洛谷p5369[PKUSC2018]最大前缀和
  8. “双非计算机专硕”考博历程分享
  9. Android APK安装后资源文件(res/assets)位置
  10. 网络工程师成长日记076-如何成为网络工程师中的高手