学成在线--12.Spring整合RibbitMQ

文章目录

  • 一.搭建SpringBoot环境
  • 二.配置
    • 1.配置application.yml
    • 2.定义RabbitConfig类
  • 三.生产端
  • 四.消费端

一.搭建SpringBoot环境

我们选择基于Spring-Rabbit去操作RabbitMQ
使用spring-boot-starter-amqp会自动添加spring-rabbit依赖,如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐test</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency>

二.配置

1.配置application.yml

配置连接rabbitmq的参数

server:port: 44000
spring:application:name: test-rabbitmq-producerrabbitmq:host: 127.0.0.1port: 5672username: guestpassword: guestvirtualHost: /

2.定义RabbitConfig类

定义RabbitConfig类,配置Exchange、Queue、及绑定交换机
本例配置Topic交换机

package com.xuecheng.test.rabbitmq.config;import org.springframework.amqp.core.*;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitmqConfig {public static final String QUEUE_INFORM_EMAIL = "queue_inform_email";public static final String QUEUE_INFORM_SMS = "queue_inform_sms";public static final String EXCHANGE_TOPICS_INFORM="exchange_topics_inform";public static final String ROUTINGKEY_EMAIL="inform.#.email.#";public static final String ROUTINGKEY_SMS="inform.#.sms.#";//声明交换机@Bean(EXCHANGE_TOPICS_INFORM)public Exchange EXCHANGE_TOPICS_INFORM(){//durable(true) 持久化,mq重启之后交换机还在return ExchangeBuilder.topicExchange(EXCHANGE_TOPICS_INFORM).durable(true).build();}//声明QUEUE_INFORM_EMAIL队列@Bean(QUEUE_INFORM_EMAIL)public Queue QUEUE_INFORM_EMAIL(){return new Queue(QUEUE_INFORM_EMAIL);}//声明QUEUE_INFORM_SMS队列@Bean(QUEUE_INFORM_SMS)public Queue QUEUE_INFORM_SMS(){return new Queue(QUEUE_INFORM_SMS);}//ROUTINGKEY_EMAIL队列绑定交换机,指定routingKey@Beanpublic Binding BINDING_QUEUE_INFORM_EMAIL(@Qualifier(QUEUE_INFORM_EMAIL) Queue queue,@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_EMAIL).noargs();}//ROUTINGKEY_SMS队列绑定交换机,指定routingKey@Beanpublic Binding BINDING_ROUTINGKEY_SMS(@Qualifier(QUEUE_INFORM_SMS) Queue queue,@Qualifier(EXCHANGE_TOPICS_INFORM) Exchange exchange){return BindingBuilder.bind(queue).to(exchange).with(ROUTINGKEY_SMS).noargs();}}

三.生产端

使用RarbbitTemplate发送消息

package com.xuecheng.test.rabbitmq;
import com.xuecheng.test.rabbitmq.config.RabbitmqConfig;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@SpringBootTest
@RunWith(SpringRunner.class)
public class Producer05_topics_springboot {
@Autowired
RabbitTemplate rabbitTemplate;
@Test
public void testSendByTopics(){
for (int i=0;i<5;i++){
String message = "sms email inform to user"+i;
rabbitTemplate.convertAndSend(RabbitmqConfig.EXCHANGE_TOPICS_INFORM,"inform.sms.email",message);
System.out.println("Send Message is:'" + message + "'");
}
}
}

四.消费端

创建消费端工程,添加依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐amqp</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐test</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐starter‐logging</artifactId>
</dependency

使用@RabbitListener注解监听队列

package com.xuecheng.test.rabbitmq.mq;
import com.rabbitmq.client.Channel;
import com.xuecheng.test.rabbitmq.config.RabbitmqConfig;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class ReceiveHandler {
//监听email队列
@RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_EMAIL})
public void receive_email(String msg,Message message,Channel channel){
System.out.println(msg);
} /
/监听sms队列
@RabbitListener(queues = {RabbitmqConfig.QUEUE_INFORM_SMS})
public void receive_sms(String msg,Message message,Channel channel){
System.out.println(msg);
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452226.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一网打尽中文编码转换---6种编码30个方向的转换

一网打尽中文编码转换——6种编码30个方向的转换 1.问题提出 在学编程序时&#xff0c;曾经有人问过“你可以编一个记事本程序吗?”当时很不屑一顾&#xff0c;但是随着学习MFC的深入&#xff0c;了解到记事本程序也并非易事&#xff0c;难点就是四种编码之间的转换。 对于编…

安装Ubunutu音频视频库

sudo apt-get install ubuntu-restricted-extras转载于:https://www.cnblogs.com/or2-/p/9216235.html

十万服务器秒级管控 腾讯云如何将AIOps用于日常管理?

AIOps&#xff0c;是指基于算法的 IT运维&#xff08;Algorithmic IT Operations&#xff09;&#xff0c;由 Gartner定义的新类别&#xff0c;源自业界之前所说的 ITOA&#xff08;IT Operations and Analytics&#xff09;。我们已经到达了这样的一个时代&#xff0c;数据科学…

ssm(springMVC + spring+MyBatis) 小例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 整体环境参见本人另一文&#xff1a;http://blog.csdn.net/jiangyu1013/article/details/51983360 此工程访问入口为index.jsp页面. 工…

多值依赖

在关系模式中&#xff0c;函数依赖不能表示属性值之间的一对多联系&#xff0c;这些属性之间有些虽然没有直接关系&#xff0c;但存在间接的关系&#xff0c;把没有直接联系、但有间接的联系称为多值依赖的数据依赖。例如&#xff0c;教师和学生之间没有直接联系&#xff0c;但…

js控制语句练习(回顾)

1、一个小球从100米空中落下&#xff0c;每次反弹一半高度&#xff0c;小球总共经过多少米&#xff0c;请问第10次反弹的高度是多少&#xff1f; //定义初始下落过程高度 var sum1 0; //定义初始上升高度 var sum2 0; //高度变化 var hight 100; for(var i0;i<10;i){ // …

学成在线--13.RabbitMQ工作模式

文章目录一.Work queues二.Publish/subscribe1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考三.Routing1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思考四.Topics1.工作模式2.代码1&#xff09;生产者2&#xff09;消费者3.测试4.思…

《C++字符串完全指南——第一部分:win32 字符编码》

《C字符串完全指南--第一部分:win32 字符编码》 原作者:Michael Dun 译 者:Dingqiao Wang 引言 毫无疑问&#xff0c;你肯定见过像TCHAR, std::string, BSTR等等这类字符串类型.也包括一些以_tcs开头的奇怪的宏。也许你正盯着屏幕"哇哇"的发愁&#xff0c;然…

Spring、Spring MVC、MyBatis整合文件配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 web.xml的配置 web.xml应该是整个项目最重要的配置文件了&#xff0c;不过servlet3.0中已经支持注解配置方式了。在servlet3.0以前每…

19.C++-(=)赋值操作符、初步编写智能指针

()赋值操作符 编译器为每个类默认重载了()赋值操作符默认的()赋值操作符仅完成浅拷贝默认的赋值操作符和默认的拷贝构造函数有相同的存在意义()赋值操作符注意事项 首先要判断两个操作数是否相等 返回值一定是 return *this; 返回类型是Type&型,避免连续使用后,出现bug 比如…

windows mysqldump 不成功 1049 1064 报错

1064 路径不对&#xff0c;需要cd选到mysql bin目录下 1049 在cmd里面不需要分号 以下是正确的 E:\phpStudy\PHPTutorial\MySQL\bin>mysqldump -uroot -proot db >db.sql 转载于:https://www.cnblogs.com/JANCHAN/p/9227388.html

学成在线--14.使用RabbitMQ完成页面发布

文章目录一.技术方案二.页面发布——消费方1.需求分析2.创建Cms Client工程1&#xff09;创建maven工程2&#xff09;配置文件3&#xff09;启动类3.RabbitmqConfig配置类4.定义消息格式5.PageDao1&#xff09;使用CmsPageRepository 查询页面信息2&#xff09;使用CmsSiteRepo…

对象模型中类与类间的关系

类与类之间通常有关联、聚集、泛化(继承)、依赖和细化4种关系 1.关联 关联表示两个类的对象之间存在某种语义上的联系。 (1) 普通关联 只要在类与类之间存在连接关系就可以用普通关联表示。普通关联的图示符号是连接两个类之间的直线&#xff0c;如下图所示。关联…

记忆讲师石伟华微信公众号2017所有文章汇总(待更新)

17-10-24-不胜光荣的记忆 17-10-26-每日一个超长英文单词&#xff08;2&#xff09; 17-10-27-每日一个超长英文单词&#xff08;3&#xff09; 17-10-28-每日一个超长英文单词&#xff08;4&#xff09; 转载于:https://www.cnblogs.com/bakblog/p/9228096.html

Log4J日志配置详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、Log4j简介 Log4j有三个主要的组件&#xff1a;Loggers(记录器)&#xff0c;Appenders (输出源)和Layouts(布局)。这里可简单理解为日…

中文编码杂谈

编码问题的例子 在windows自带的notepad&#xff08;记事本&#xff09;程序中输入“联通”两个字&#xff0c;保存后再次打开&#xff0c;会发现“联通”不见了&#xff0c;代之以“”的乱码。这是windows平台上典型的中文编码问题。即文件保存的时候是按照ANSI编码&#xff…

Java NIO (十四)NIO 和 IO 的区别和适用场景分析

在研究Java NIO和IO API时&#xff0c;很快就会想到一个问题&#xff1a; 什么时候应该使用IO&#xff0c;什么时候应该使用NIO&#xff1f; 在本文中&#xff0c;我将尝试阐明Java NIO和IO之间的区别&#xff0c;它们的用例以及它们如何影响代码的设计。 ###Java NIO和IO之间的…

面向对象三种模型之间的关系

功能模型指明了系统应该“做什么”&#xff1b;动态模型明确规定了什么时候(即在何种状态下接受了什么事件的触发)做&#xff1b;对象模型则定义了做事情的实体。在面向对象方法学中&#xff0c;对象模型是最基本最重要的&#xff0c;它为其他两种模型奠定了基础&#xff0c;人…

android node

pkg install nodejs-current转载于:https://www.cnblogs.com/insight0912/p/9231342.html

springmvc 中@Controller和@RestController的区别

1.Controller, RestController的共同点 都是用来表示Spring某个类的是否可以接收HTTP请求 2.Controller, RestController的不同点 Controller标识一个Spring类是Spring MVC controller处理器 RestController&#xff1a; a convenience annotation that does nothing more …