技术标签: springboot2.0集成rabbitmq
springboot2.0集成rabbitmq
最近需要用上rabbitmq,项目是用springboot搭建的,所以就要在springboot环境下单独集成rabbitmq,写这篇文章用来记录下。不多说了,进入正题。
1.首先引入Maven依赖:spring-boot-starter-amqp
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
2.application.yml中引入配置项:
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: root
virtual-host: vhost_one
publisher-confirms: true #开启发送确认
publisher-returns: true #开启发送失败退回
3.生产者:
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
public class RabbitMqConfig {
@Bean
public RabbitTemplate setRabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate();
rabbitTemplate.setConnectionFactory(connectionFactory);
rabbitTemplate.setExchange(“topicExchange”);
// 设置消息内容序列化方式
rabbitTemplate.setMessageConverter(new Jackson2JsonMessageConverter());
return rabbitTemplate;
}
/**
生成主题路由器
@return
*/
@Bean(“topicExchange”)
public TopicExchange topicExchange() {
return new TopicExchange(“topicExchange”, true, false);
}
/**
定义发送短信的队列
@return
*/
@Bean(“sendSMSQueue”)
public Queue sendSMSQueue() {
return new Queue(“sendSMS”, true, false, false);
}
/**
创建发送短信的队列和主题交换机的绑定关系
@param queue
@param exchange
@return
*/
@Bean
public Binding bingExchangeANDqueue(@Qualifier(“sendSMSQueue”)Queue queue, @Qualifier(“topicExchange”)TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(“common.sendSMS.#”);
}
}
上面配置好了RabbitTemplate和路由和队列以及绑定关系,在项目中直接调用RabbitTemplate的发送消息的方法即可:
@Autowired
private RabbitTemplate rabbitTemplate;
@Override
public void send() {
rabbitTemplate.convertAndSend(“common.sendSMS.msg”, “rabbitmq发送短信1给你了”);
}
4.消费者:
application.yml中引入配置项和生产者一样:
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: root
password: root
virtual-host: vhost_one
同时也需要设置RabbitConfiguration来设置序列化的方式,就用spring提供的Jackson2JsonMessageConverter类来方序列化和序列化,RabbitConfiguration类如下:
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class RabbitConfiguration {
@Bean
public SimpleRabbitListenerContainerFactory myFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory factory =
new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
factory.setMessageConverter(new Jackson2JsonMessageConverter());
return factory;
}
}
调用示例:
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@EnableRabbit
public class Consumer {
@RabbitListener(queues = "sendSMS", containerFactory = "myFactory")
public void sendMsg(String content) {
System.out.println(content);
}
}
文章浏览阅读763次。有时站长不希望抓取和收录某些页面,为确保页面不被收录,需要使用robots文件或Meta Robots标签。1、robots文件 搜索引擎蜘蛛访问网站时,会先查看网站根目录下有没有一个命名为robots.txt的纯文本文件,robots.txt用于指令搜索引擎禁止抓取网站某些内容或指定允许抓取某些内容。robots.txt文件有记录组成,记录之间以空行分开,记录格式为::2、me_禁止收录
文章浏览阅读328次。在上篇内容增强网络表示学习的一般框架(A General Framework for Content-enhanced Network Representation Learning)(2)对整个网络进行了简单的处理,得到了一个边集关系的文件,我们接下来的节点表示工作,就基于该数据集,当然,要进行将孤立节点也整进去。这里,将使用node2vec来进行嵌入操作,因为这个算法可以看作是对DeepWalk的一个扩展,也比较成熟。简单抄抄介绍:node2vec是一种综合考虑DFS邻域和BFS邻域的graph _增强网络节点的表示学习
文章浏览阅读3.3k次,点赞5次,收藏23次。记录一下使用docker快速搭建部署hive环境_docker linux 操作 hive
文章浏览阅读199次。还是在上次提到的数据之魅那本书,看到模拟这章,有个python模拟脚本,但书上不全,就自己简单写了下。流程:在不同的平衡参数p(为0.5时为均匀的)下,模拟60次实验,每次投硬币8次,统计正面朝上的次数,并作图。import randomimport matplotlib.pyplot as pltrepeats, tosses = 60, 8# p为平衡参数,tosses为每次重复试验中投掷硬币..._python编写一个程序模拟抛硬币的结果,总共抛50次,每隔0.1秒输出一个结果(结果分为
文章浏览阅读5.1k次,点赞3次,收藏11次。第一次写博客,没有啥头绪。发现在网上关于VMware虚拟机环境中为dos安装masm的教程甚少,于是自己琢磨,最后也是安装好了。直接开始吧!1.首先,在这个网站(google搜索"masm下载"第一个)点击masm.zip下载masm的压缩文件。2.将下载好的masm.zip文件解压,过程略。3.打开VMware虚拟机,将ms-dos关机。4.点击编辑虚拟机_masm.zip
文章浏览阅读605次。实验三 常用串口终端工具安装【实验目的】 在Windows中安装串口终端工具,掌握常见串口终端工具的配置和使用方法。 说明:在实验中命令行提示符为“$”表示在主机上运行,“#”表示在目标板上运行。【实验环境】Windows Ubuntu 12.04 64位发行版 FS6818平台【实验步骤】将 “案例源码\第一天\工具软件\ putty.exe”拷贝到桌面,或拷贝至任一文件夹然后发送快捷方式到桌面。 双击桌面上的putty.exe图标,弹出如下的对话框..._rp6818串口驱动
文章浏览阅读1.6k次。最近后台服务突然出现了连接池不够用的情况,不定时的会抛出java.lang.IllegalStateException: Pool not open2019-09-06 08:21:52.701->java.lang.IllegalStateException: Pool not openjava.lang.IllegalStateException: Pool not open..._innodb: file (unknown): 'read' returned os error 205. cannot continue operat
文章浏览阅读1.2k次,点赞3次,收藏3次。网上找一个JAVA 版CRC16校验Modbus版都很多不正确,记录一下,方便其他人。CRC-16/Modbus x^16 + x^15 + x^2 + 1 (0x8005)验证http://www.ip33.com/crc.htmlCRC16M.java/** * CRC-16/Modbus x^16 + x^15 + x^2 + 1 (0x8005) *..._crc-16/modbus x16+x15+x2+1 java
文章浏览阅读5.8k次,点赞3次,收藏3次。看起来这是个常规性的动作。不知道什么时候你就需要用JAVA处理一下XML。虽说现在用XML作为媒体进行数据交换不是那么有效率(你可以试着Google “为啥不用XML” 之类的了解了解),不过鉴于很多古板的系统只能支持长胡子的技术实现,所以这方面也要照顾一下退休人士。了解背景会让你聊天的时候显得牛一些。Java原生内置的处理XML的技术基本有这么几种:DOM,SAX,Stax_java 处理xml
文章浏览阅读2.7k次。新增硬盘后 fdisk -l不显示硬盘echo “- - -” > /sys/class/scsi_host/host0/scanecho “- - -” > /sys/class/scsi_host/host1/scanecho “- - -” > /sys/class/scsi_host/host2/scan在fdisk -l即可以看到硬盘了..._插入到服务器的硬盘,在操作系统没有
文章浏览阅读2w次,点赞12次,收藏63次。1,锁定数组的长度(只读模式)[ Array.join() ]var a = [1,2,3] //定义一个数组<br>Object.defineProperty(a,"length",{ writable:false}) //将a数组的长度属性设为只读<br>a.length = 0 //将a的长度改为0<br>console.log(a.length); //打印a数组的长度,还是32、将数组合并成字符串(返回字符串)[ Array.join_vue 数组
文章浏览阅读1.8w次,点赞9次,收藏59次。本文环境:opencv+python3.4之前在实验室看到了8000行的椭圆检测,然后就手痒了。。。当然,人家的研究成果很牛叉,我的只算是没事瞎Happy各位客官就看着玩吧。代码中有两处参数可以更改。准确率一般。import cv2import numpy as npfrom matplotlib import pyplot as pltimport mathimg=cv2.imrea_cv2找椭圆