RabbitMQ学习笔记 - Docker部署

RabbitMQ

AMQP协议(Advanced Message Queuing Protrocol) -- 高级消息队列协议、应用层

基础架构

RabbitMQ安装

安装过程基于Docker,Dokcer用法详见另外一篇

从RabbitMQ官网查看对应的Erlang版本

RabbitMQ Erlang Version Requirements — RabbitMQ

docker pull erlang:25.2
docker pull rabbitmq:3.11-manager
docker run -id erlang
docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.11-management

查询IP: ifconfig 登录管控面板: IP:15672 账号密码均为guest

生产者&消费者

Demo

package org.example;
​
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
​
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
​
public class Main {
    public static void main(String[] args) throws IOException, TimeoutException {
​
        // 创建连接工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
​
        // 设置参数
        connectionFactory.setHost("192.168.131.129");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");     //默认值为guest
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/hello");
        // 创建连接 Connection
        Connection connection=connectionFactory.newConnection();
        // 创建Channel
        Channel channel = connection.createChannel();
        /**
         queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         queue 队列名称
         durable 是否持久化
         exclusive{
         是否独占,只能又一个消费者监听这个队列
         当connection close时,是否删除队列
         }
         autoDelete 当没有Consumer时是否自动删除
         */
        // 创建队列
        channel.queueDeclare("Hello",true,false,false,null);
        // send
        /**
         * String exchange      交换机名称,简单模式下使用默认的""
         * String routingKey    路由名称,如果使用默认交换机,路由名称就为channel名称
         * AMQP.BasicProperties props 配置信息
         * byte[] body          //发送消息数据
         */
        String p="Hello!";
        channel.basicPublish("","Hello",null,p.getBytes());
        //释放资源
        channel.close();
        connection.close();
        System.out.println("OK");
    }
}
package org.example;
​
import com.rabbitmq.client.*;
​
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;
​
public class Main {
    public static void main(String[] args) throws IOException, TimeoutException {
​
        // 创建连接工厂
        ConnectionFactory connectionFactory=new ConnectionFactory();
​
        // 设置参数
        connectionFactory.setHost("192.168.131.129");
        connectionFactory.setPort(5672);
        connectionFactory.setUsername("guest");     //默认值为guest
        connectionFactory.setPassword("guest");
        connectionFactory.setVirtualHost("/hello");
        // 创建连接 Connection
        Connection connection=connectionFactory.newConnection();
        // 创建Channel
        Channel channel = connection.createChannel();
        /**
         queueDeclare(String queue, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments)
         queue 队列名称
         durable 是否持久化
         exclusive{
         是否独占,只能又一个消费者监听这个队列
         当connection close时,是否删除队列
         }
         autoDelete 当没有Consumer时是否自动删除
         */
        // 创建队列
        channel.queueDeclare("Hello",true,false,false,null);
        //String queue  队列名称
        // boolean autoAck  是否自动确认
        // Consumer callback 回调对象
        Consumer consumer=new DefaultConsumer(channel){
            //回调方法  ,当收到消息后自动执行
            // cisynerTag 标识
            // proerties 配置信息
            // body 数据
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {
                System.out.println(new String(body));
            }
        };
        channel.basicConsume("Hello",true,consumer);
​
​
    }
}

工作模式

WorkQueues

Pub/Sub订阅模式

Routing路由模式

Topic通配符模式

Spring整合RabbitMQ

(77条消息) SpringBoot整合RabbitMQ超级详细教程adobehu的博客-CSDN博客springboot rabbitmq

本文转载于网络 如有侵权请联系删除

相关文章

  • Xray使用「建议收藏」

    大家好,又见面了,我是你们的朋友全栈君。安装过程本文省略,想看安装请看这个——>《Xray安装与使用》20200806,下班前五分钟安装好了,在windows上安装的,后执行了扫描一个url的命令。.\xray_windows_amd64.exewebscan–urlhttp://example.com/–html-outputxray-testphp.html扫了个知道有SQL注入的地址,确实可以扫出来,整了txt和html的报告,都还行。20200807,测试开代理被动扫描。先修改了config.yaml文件中然后,执行了以下命令,设置监听IP和端口。.\xray_windows_amd64.exewebscan–listen127.0.0.1:8072–html-outputxray-testphp.html除了这些poc,还能测一些通用常规漏洞,如下Enabledplugins:[sqldetcmd_injectiondirscanpath_traversalxxephantasmuploadbrute_forcejsonpssrfbaselineredirectcrlf

  • Snapdragon 855 performance view

    AswegeteverclosertothereleasesofvariousAndroidvendor’snewestgenerationdevices,QualcommcontinuesitstraditionofshowcasingtheperformanceofitsnewestgenerationSoCaheadoftime,givingusapreviewandaglimpseofwhattoexpectoftheupcomingcommercialdevices.Thisyear,thecompanyhasshuffledtheschedulearoundabit,andinsteadofhostingtheeventattheirSanDiegoheadquarters,andwewereabletogetahands-onwiththeSnapdragon855atCESbeforetheshowhadstarted.Todaywe’rebelookinginquiteextensivedetailonhowexactlythenewSnapdragonchipset

  • Auto Seg-Loss: 自动损失函数设计

    作者丨ILOAH@知乎来源丨https://zhuanlan.zhihu.com/p/266102401编辑丨极市平台导读本文所提出的AutoSeg-Loss的设计目的在于降低为了某个给定的指标(比如边缘部分的IoU或者F-score)设计和调整损失函数时的试错成本,并向自动损失函数设计更进一步。前段时间,有一则新闻比较火:全国游泳冠军赛引发争议,傅园慧等五位预赛排名第一的名将因体能测试分数低而无缘决赛体能水平可以反映竞技水平吗?对于普通人来说,体能水平和单项的比赛能力大多存在正相关关系。然而,高水平运动员需要的是对特定项目的针对性训练,更高的体能水平并不意味着更好的成绩,比如对于某些项目(如长跑)来说,上肢过于强壮反而是负担。因此,许多高水平运动员即使在专项上打破了亚洲记录,面对体能测试也败下阵来。反过来考虑,如果一个运动员日常只以体能测试的项目作为自己的训练目标,最终长跑、冲刺、引体、深蹲等项目炉火纯青,那么他大概率也可以在某些专项上凭借身体素质取得远超普通人的成绩,但并不足以成为顶尖的运动员。为什么要说这则新闻呢?实际上,如果把我们的神经网络模型看做一个运动员,许多时候,这个运动

  • Angular自定义structural指令的实例化过程以及set方法的调用

    我有一个自定义指令*appUnless,在第48行使用,这个前面是第39行的,后面是第52行的:观察运行时构造函数传入的elementRef:发现其前面的节点确实为p:且该p的4个子节点如下:且text,span,text和button子节点依次显示如下:给当前的element设置property值:/** *@fileoverviewaddedbytsickle *Generatedfrom:packages/core/src/render3/instructions/property.ts *@suppress{checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode}checkedbytsc */ /** *Updateapropertyonaselectedelement. * *Operatesontheelementselectedbyindexviathe{\@linkselect}instruction. * *Ifthe

  • Java中的Object类简述

    1.Object类1.1Object类概述Java中所有类的基类!!! Java中所有的类都是间接或者直接继承Object类。 Object类的引用数据类型变量可以保存Java中任意数据类型空间的首地址。Object类内规定了一些方法: StringtoString(); 当前对象建议String类型描述。默认情况是当前类所属包名.类名@十六进制内存地址 如果对于数据类型展示有要求,可以重写toString方法,在展示的方法中会默认执行toString方法inthashCode(); 内存中当前对象的唯一索引值,默认情况下是当前对象所处空间首地址的十进制展示。booleanequals(Objectobj); 比较方法,判断两个对象是否一致,Object类内默认情况下比较的方式是地址比较。 两个对象地址一致,表示肯定是相同对象。如果我们期望修改equals比较规则,可以在当前类内重写 【注意】 Java中规定,如果两个对象的equals比较方法结果为true,要求hashCode值必须一致。下列方法之后再介绍: 线程有关方法 voidwait(); voidnotify(); void

  • 脸萌出海记:如何在多国排行榜拿下第一?

    脸萌团队从今年五月开始展露头角,六月登顶国内AppStore和全球的AppStore排行榜后,顺利完成了A轮数千万融资。但这一切没有打消砖家们的顾虑,争议声从没有停止:“脸萌”还能“萌”多久?、“脸萌难逃厄运,哪些App过把瘾就死”、“脸萌,能否把流星做成太阳?”、“脸萌一夜爆红后如何才能不死得快?”······质疑声还未散去,一个多月后,脸萌团队再次交出了自己的成绩单:脸萌海外版FaceQ上线半个月来,在美国、英国等多个国家登上了娱乐下载榜或者总榜第一位,数据还在上升中。他们用最短的时间和最低的成本创造了AppStore的记录。南七道再访脸萌团队,听听年轻的他们是怎么做到的?登顶之后要做的是登下一个顶峰脸萌火爆之后,整个团队都在思考产品的方向,当时整个团队的压力都很大,盛名之下,做任何事情考虑到的因素都很多。我们一直在思考,脸萌还能做什么?我们也在思考,做什么事情能让团队保持兴奋和成就感。在登上一个顶峰后,要做的是开始攀爬下一个顶峰。我们觉得除了做国内市场外,国际市场是必须要重视的一个领域。同时我们想通过国际市场做磨练我们的团队,让团队有新的视野和高度。我们觉得可以做两件事情,一是做

  • WeLM简介及微信公众号开发

    前言我的公众号后台设置了关键词自动回复,但是经常收到很多读者打错别字,导致无法触发,正巧,前段时间刚申请到WeLM的使用权限,于是就想着给公众号升级一下。WeLM简介WeLM是腾讯开发的一个擅长理解和生成文本的通用语言模型。 官方文档:https://welm.weixin.qq.com/docs/tutorial/主要功能如下,输入示例内容即可获得答案阅读理解示例:阅读文章: “经审理查明,被告人张××、杜×、杨2某均为辽宁省辽阳第一监狱五监区服刑人员。2015年11月3日13时许,被告人张××、杜×因无事便跟随去催要生产材料的被告人杨2某一同前往六监区,在六监区生产车间门外,被告人杨2某与六监区送料员于×因送料问题发生争执,被告人杨2某上前拽住被害人于×胳膊并用手击打被害人后脖颈两下,被告人张××、杜×见杨2某动手后,先后上前分别对被害人于×面部、头部及腹部进行殴打,后被赶到的干警制止。被害人于×被打造成面部受伤,鼻子流血,当日下午14时许,到监区内医院就诊,诊断为:鼻部中段向左侧畸形,11月5日经监狱医院X光诊断为鼻骨骨折。2015年11月18日,经辽阳襄平法医司法鉴定所法医鉴定

  • 前端首屏渲染时间的极致优化

    我们知道,用户体验是Web产品最为重要的部分。尽可能减少首屏加载时间,更为流畅地展示用户所需求的内容,会是用户是否留存的关键因素。 而随着现代Web业务可供用户的交互行为越来越多,前端项目的复杂度越来越高,每个页面的渲染时间也必然越来越长,这就导致了用户的体验不佳,用户的操作变慢。 为此,前端工程师们在首屏请求的各个阶段中持续钻研,不断探究如何将首次页面渲染的时间减少到更小,力求提供更为优秀的产品体验。 CSR(ClientSideRender) 浏览器渲染是最简单,最符合Web应用设计思路的渲染方式。 所谓浏览器渲染,就是将应用所需的页面展示、前端逻辑、接口请求全都在用户的浏览器中执行。它很好的实现了前后端的解耦,让前端开发更为独立,也让后台实现更为简单。 同时,为了缓解用户的等待焦虑,我们可以用loading态,或者骨架屏,进一步提升异步请求接口时的用户体验。 不过,随着业务复杂程度提高,浏览器渲染的开销也会变大,我们无法控制用户侧使用的机器性能,很多时候,用户使用的机器性能甚至不足以满足应用的需求,造成卡顿,甚至崩溃,这一点在移动端上尤甚。 而浏览器渲染由于前端的动态性过高,

  • npm install &quot;Unexpected end of JSON input while parsing near&quot;问题

    问题 最近配了台新电脑,开始装Node环境,去官网下载了最新的Node安装包。安装也没有问题,但是在使用npminstall这个命令的时候,就会出现UnexpectedendofJSONinputwhileparsingnear这个异常信息。 原因 最新版本的的Node.js与npm版本不合适的原因(因为没更新之前是不会的)。 解决方案 将npm版本降到4.x版本 在Windows下使用cmd执行语句:npm-ginpm@4 Mac系统也差不多。

  • Codeforces Round #262 (Div. 2)

    A 1#include<iostream> 2#include<cstdio> 3#include<cstring> 4#include<algorithm> 5#include<stdlib.h> 6#include<vector> 7#include<cmath> 8#include<queue> 9#include<set> 10usingnamespacestd; 11#defineN100000 12#defineLLlonglong 13#defineINF0xfffffff 14constdoubleeps=1e-8; 15constdoublepi=acos(-1.0); 16constdoubleinf=~0u>>2; 17intn,m; 18intmain() 19{ 20intn,m,i,j; 21cin>>n>>m; 22if(m>n) 23cout<<n<<endl; 24else 2

  • 文献笔记【十五】

    一:基本信息 标题:基于UML的图书管理系统建模 时间:2017 出版源:西华师范大学 文献分类:文献笔记 二:研究背景 随着信息技术的快速发展,图书馆的信息化建设越显重要。图书管理系统能够满足读者快捷、方便的对读书进行查询、借阅、归还等需求,还具有可靠性高、安全性好、存储量大,节约成本等特点。基于UML对图书管理系统进行分析和设计,使用ROSE工具实现了模型的建立。 复制 问题定义:图书管理系统建模 难点:UML在图书管理系统中的应用 相关工作:1:统一建模语言UML介绍 2:分析系统需求 3:根据系统需求画出系统用例图,顺序图,状态机图,部署图 三:具体内容 用例图: 顺序图: 状态机图: 部署图: 四:结论 数字图书馆的建设需要融合多种信息技术,通过网络实现资源的共享和有效利用。本文围绕UML建模在图书管理系统中的应用展开讨论,按照项目需求,建立UML的各种模型, 复制 开发人员可以更清晰的了解系统的业务流程,减少重复信息,节约人工成本,提高代码质量,有效提高软件开发效率,UML有着良好的发展前景。 引用.董屹.基于UML的图书管理系统建模西华师范大学图书馆.

  • linux定时任务执行php任务

    首先用命令检查服务是否在运行 systemctlstatuscrond.service复制 如果服务器上没有装有crontab,则可以执行 yuminstallvixie-cron yuminstallcrontabs复制 常用指令 systemctlrestartcrond.service#启动服务systemctlreloadcrond.service#重新载入配置systemctlstatuscrond.service#查看crontab服务状态systemctlenablecrond.service#开机自启动复制 启动服务之后可以输入指令 crontab-e#进入定时任务编辑复制 相关参数 基本格式:   ** * * *  command   分 时 日 月 周 命令   第1列表示分钟1~59每分钟用*或者*/1表示   第2列表示小时1~23(0表示0点)   第3列表示日期1~31   第4列表示月份1~12   第5列标识号星期0~6(0表示星期天)   第6列要运行的命令复制 例子 */2****curl-o/home/index.htmlw

  • 物联网架构成长之路(48)-MinIO对象资源存储

    0.前言  在开发物联网过程中,会遇到OTA固件升级等功能。对于服务器来说,其实就很简单的一个功能,无非就是一个上传文件,保存,下载文件的功能而已。在此之前,我也通过简单的文件系统实现文件上传下载。然后把路径保存到数据。也有人使用阿里的OSS来管理。但是今天要讲的就是搭建一个开源版本的OSS存储服务器。 1.安装MinIO  流程的话,参考官方文档,https://docs.min.io/cn/minio-quickstart-guide.html,由于使用go语言开发的,整个过程还是比较轻松简单的。这里我使用docker来运行MinIO。下面这个图,是我搭建的架构图。  这里,默认读者是已经安装过Docker和docker-compose的。下面提供docker-compose.yml  可以直接从这里下载:https://raw.githubusercontent.com/minio/minio/master/docs/orchestration/docker-compose/docker-compose.yaml 1version:'3.7' 2 3#starts4docker

  • iOS-info.plist

    Bundlename:手机图标显示的名字,如果不设置,默认是工程名 Bundleidentifier:应用程序的唯一标识 Bundleversionsstring,short:软件的版本号 Bundleversion:应用打包的版本号

  • List比较工具 - Ether.ListCompare

    注意事项: v1.1.1ByIntegerKey方法不能使用了 比较的时候,只能比较一个属性。当前版本整个对象不能比较 比较的是IEnumerable https://github.com/kinetiq/Ether.ListCompare What'sthis? ListCompareisgreatforanysituationwhereyouneedtocomparetwolistsanddosomethingusefulwiththeresult. Let'ssayascreenonyoursitehasagridofmonkeys,whereaMonkeyisdefinedthusly: publicclassMonkey { publicintMonkeyId{get;set;} publicstringName{get;set;} } 复制 Usersaddandremovemonkeysfromthegrid,andthenwhenthey'redone,theyhitsavetosubmittheentirelist. Asthedeveloper,youarelef

  • 挖土机编程 CSP-J 2022 模拟赛 Round 2

    闲来无事,做一套CSP-J普及组的题找找状态( 基本都是贪心和模拟题,适合热手。 1探索未知 P8584探索未知-洛谷|计算机科学教育新生态(luogu.com.cn) 模拟一下分数相加相减就行,注意负数处理。 一个\(\frac{a}{b}\)分数化为最简分数时,只需要把分子分母同除以分子与分母的最大公约数即可。 即:\(\frac{a/gcd(a,b)}{b/gcd(a,b)}\) 两个分数之间通分则先求出分母之间的最小公倍数,然后这个公倍数就是新的分母,前一个的分子乘上公倍数除以前一个的分母,后一个的分子乘上公倍数除以后一个的分母,然后相加减。 即:\(\frac{a}{b}+\frac{c}{d}=\frac{a*\frac{lcm(b,d)}{b}+c*\frac{lcm(b,d)}{d}}{lcm(b,d)}\) 用flag记录当前的数的符号。 代码 #include<iostream> usingnamespacestd; longlonggcd(longlonga,longlongb) { if(a<b) gcd(b,a); returnb?gcd(

  • Telnet邮件服务器发送邮件

    下面的例子是用139的smtp服务器 telnetsmtp.139.com25//telnet到smtp端口 Trying120.232.169.42... Connectedtosmtp.139.com. Escapecharacteris'^]'. 220localhostrichmailsystemv10(2f176279184726f-809c0)//服务器返回220 helomytest//跟服务器打招呼 250localhostrichmailsystemv10(2f176279184726f-809c0)//服务器返回250 authlogin//登录 334dXNlcm5hbWU6//服务器返回334 ***//*此处输入base64编码后的qq邮箱名*/ 334UGFzc3dvcmQ6//服务器返回334 ***//*此处输入base64编码后的授权码*/ 235Authenticationsuccessful//登录成功 mailfrom:<kfwtry@139.com>//发件邮箱 250ok rcptto:<lp459rh@qq.com>

  • eclipse上配置svn

    eclipse里安装SVN插件,一般来说,有两种方式:  直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse里Help菜单的“InstallNewSoftware”,通过输入SVN地址,直接下载安装到eclipse里    第一种方式:    1.下载SVN插件   SVN插件下载地址及更新地址,你根据需要选择你需要的版本。现在最新是1.8.x  Linksfor1.8.xRelease:      EclipseupdatesiteURL:http://subclipse.tigris.org/update_1.8.x      svn插件包下载:http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240  Linksfor1.6.xRelease:&

  • 图像分割思路

    将图像的梯度融入进网络之中。

  • Configfs - 用户空间驱动的内核对象配置

    configfs是什么? Configfs是一个基于ram的文件系统,它提供了与sysfs相反的功能。其中,sysfs是基于文件系统的内核对象视图,configfs是基于文件系统的内核对象管理器,或config_items。 使用sysfs,将在内核中创建一个对象(例如,当发现设备时),并将其注册到sysfs。它的属性然后出现在sysfs中,允许用户空间通过readdir(3)/read(2)读取属性。它可能允许通过write(2)修改某些属性。重要的一点是,对象是在内核中创建和销毁的,内核控制着sysfs表示的生命周期,而sysfs仅仅是这一切的一个窗口。 configfsconfig_item是通过显式用户空间操作创建的:mkdir(2)。它通过rmdir(2)销毁。这些属性在mkdir(2)时出现,可以通过read(2)和write(2)读取或修改。与sysfs一样,readdir(3)查询items和/或属性的列表。可以使用符号链接(2)将项目分组在一起。与sysfs不同,configfs的生命周期完全由用户空间驱动。支持这些项的内核模块必须对此做出响应。 sysfs和conf

  • 软件测试之接口测试系列一

    1.接口测试的定义   接口:常用接口有两种API(应用程序接口,属于操作系统或程序接口)、GUI(图形界面接口,属于图形接口)。   接口测试是测试系统组件间接口的一种测试。主要用于检测外部系统与系统之间以及各个子系统之间的交互点。   接口测试就是通过测试不同情况下输入参数与之相应的输出参数信息来判断接口是否满足相应的功能性、安全性要求。 2.为什么要做接口测试   传统测试成本急剧增高(主要是时间成本),效率降低。   接口测试站在用户(调用接口的用户)的角度对系统进行全面高效持续的检测。   接口测试是自动化并且持续进行的。   接口测试是一个完整的体系,也包括功能测试、性能测试。 3.接口测试概述   接口测试适用环境:多系统间交互开发、为其他系统提供底层框架系统和中心服务系统、上层接口中的服务接口   平台越复杂、系统约庞大、接口测试的效果越明显。   接口测试好处:发现很多页面上发现不了的错误、检查系统的异常处理能力、检查系统的安全性和稳定性。   前端随便编,接口测试做好了后端不必变。 4.接口测试目标   核心:保证系统稳定。      

相关推荐

推荐阅读