官方文档:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#boot-features-amqp

引入依赖:

  <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

发送消息代码:

@RestController
@RequestMapping("/")
public class SenderMsgController { @Autowired
private AmqpTemplate amqpTemplate; @RequestMapping(value = "/{str}")
public void testSend(@RequestParam("str") String str) throws InterruptedException {
for (int i = 0; i < 10; i++) {
int millis = 500;
Thread.sleep(new Long(millis));
if (i%2 == 1) {
String isr = "{\n" + "\t\"dd\":" + i + "}"; amqpTemplate.convertAndSend("DirectExchange","test.1",isr,new MyMessageConverter()); }else{
String isr = "{\n" + "\t\"dd\":" + i + "}";
amqpTemplate.convertAndSend("DirectExchange","test.2",isr,new MyMessageConverter());
}
System.out.println("第"+i+"次发送");
}
}
}
MyMessageConverter:
//MessagePostProcessor 接口可以对发送请求之前的Message 进行操作,这里我设置了contenttype为json格式
public class MyMessageConverter implements MessagePostProcessor {
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setContentType(MessageProperties.CONTENT_TYPE_JSON);
return message;
}
}

创建交换机、队列并互相绑定设置路由key

@Component
public class AmqpAdminConfig { @Autowired
public AmqpAdmin amqpAdmin; @Bean
public DirectExchange createDirectExchange(){
DirectExchange directExchange = new DirectExchange("DirectExchange", false, false);
amqpAdmin.declareExchange(directExchange);
return directExchange;
} // @Bean
// public void createFanoutExchange(){
// amqpAdmin.declareExchange(new FanoutExchange("FanoutExchange",false,false));
// } @Bean
public Queue createQueue1(){
Queue queue = new Queue("queue-1", false, false, false);
amqpAdmin.declareQueue(queue);
return queue;
} @Bean
public Queue createQueue2(){
Queue queue = new Queue("queue-2", false, false, false);
amqpAdmin.declareQueue(queue);
return queue;
} @Bean
public void createBinding1(){
Binding bind = BindingBuilder.bind(createQueue1()).to(createDirectExchange()).with("test.1");
amqpAdmin.declareBinding(bind);
}
@Bean
public void createBinding2(){
Binding bind = BindingBuilder.bind(createQueue2()).to(createDirectExchange()).with("test.2");
amqpAdmin.declareBinding(bind);
} }

根据官方文档知道AmqpTemplate 和AmqpAdmin  已经自动配置,可直接注入使用,AmqpTemplate 封装了发送与接收的各种操作,AmqpAdmin  封装了针对交换机和消息队列的各种操作

SpringBoot Rabbitmq发送消息的更多相关文章

  1. Spring-boot JMS 发送消息慢的问题解决

    1:在<ActiveMQ 基于zookeeper的主从(levelDB Master/Slave)搭建以及Spring-boot下使用>(http://www.cnblogs.com/ys ...

  2. c# RabbitMQ 发送消息

    参考地址:<C#使用RabbitMQ> C#操作RabbitMQ需要引用RabbitMQ的DLL,地址是:http://www.rabbitmq.com/releases/rabbitmq ...

  3. RabbitMQ发送消息成功,但是接受不到消息

    commom模块为mq配置模块 分了多模块后消息队列无法自动创建,发现原因竟然是SpringBoot没有扫描到common模块内的配置类. 我们在XxxApplication启动类上添加@Compon ...

  4. 给RabbitMQ发送消息时,设置请求头Header。

    消费者的请求头 生产者设置请求头 由于消费者那里,@Payload是接受的消息体,使用了@Header注解,需要请求头,生产者这边就要设置请求头,然后rabbitTemplate再调用convertA ...

  5. SpringBoot Rabbitmq接收消息

    官网地址:https://docs.spring.io/spring-boot/docs/2.1.3.RELEASE/reference/htmlsingle/#boot-features-amqp ...

  6. springboot项目整合rabbitMq涉及消息的发送确认,消息的消费确认机制,延时队列的实现

    1.引入maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...

  7. springboot整合rabbitMq实现消息延时发送

    实现思路:利用mq的ttl设置消息失效时间 当达到设置时间后通过交换机到达死信队列中,消费者端绑定读取死信队列中信息来达到延时发送消息的功能. demo 如下: (1)在pom.xml 中引入rabb ...

  8. SpringBoot | 第三十八章:基于RabbitMQ实现消息延迟队列方案

    前言 前段时间在编写通用的消息通知服务时,由于需要实现类似通知失败时,需要延后几分钟再次进行发送,进行多次尝试后,进入定时发送机制.此机制,在原先对接银联支付时,银联的异步通知也是类似的,在第一次通知 ...

  9. springboot核心技术(五)-----消息(rabbitmq)

    消息 1. 大多应用中,可通过消息服务中间件来提升系统异步通信.扩展解耦能力 2. 消息服务中两个重要概念: 消息代理(message broker)和目的地(destination) 当消息发送者发 ...

随机推荐

  1. caffe安装中opencv的各种库问题

    提示有些库 high**** opencv的问题,好像是这几个库版本冲突,不要用anaconda里的lib库,用系统的库就行了,删掉或者从新链接过去.

  2. java循环删除List元素的方法总结

    1.for循环 2.迭代器 3.过渡法 import java.util.*; /** * Created by HP on 2018/8/2. */ public class Test { publ ...

  3. 日常运维管理技巧一(查看负载 W)

    日常运维管理技巧一(查看负载 W) 今天针对Linux系统管理做一个专题的记录,以后会用的几率也是很大的,只要掌握必备的基础知识,做初级系统管理员是不成问题的. 作为一个运维工程师.系统管理员,如果对 ...

  4. HashMap的使用

    HashMap的使用 import java.util.HashMap; import java.util.Iterator; //HashMap<key, value>():键值对的形式 ...

  5. python导包语句执行

    今天在做项目中遇到一个问题,在first_page中引用login的登录方法,第一次执行登录可以正常登录,登录成功后,再选择返回主菜单,回到上个页面,再选择登录时报错“login_class isno ...

  6. python__基础 : 类属性,类方法,静态方法

    类属性  定义在类里面,方法外面的属性,一般属于这个类,如下面的 num 就是类属性: class Test: num = 类属性用 实例.类属性   或者 类.类属性 都可以访问, 如 a = Te ...

  7. react native "Unable to resolve module `AccessibilityInfo`

    error: bundling failed: "Unable to resolve module `AccessibilityInfo` from `/Users/apple/Websto ...

  8. 部分和问题 南阳acm1058(递归+dfs)

    部分和问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 给定整数a1.a2........an,判断是否可以从中选出若干数,使它们的和恰好为K.   输入 首先, ...

  9. HDU 6274 二分+预处理(CCPC K题

    #include"bits/stdc++.h" #define db double #define ll long long #define vec vector<ll> ...

  10. MongoDB的Go语言驱动注意点

    当我们定义一个struct用来和集合对应时,要注意结构体的字段首字母应该大写,不然不可见. 通过`bson:"name"`这种方式可以定义MongoDB中集合的字段名,如果不定义, ...