您的位置:首页 > 编程语言 > Java开发

Springboot+rabbitMQ(只连接一个rabbitMQ)数据传输实例

2019-04-02 17:18 477 查看

一、简介
本文使用的基础框架为Springboot,连接了一个rabbitMQ,使用Springboot框架提供的api进行数据传输。即Springboot+rabbitMQ的简单实现代码

二、代码
application.properties配置

#rabbitmq 相关配置
spring.application.name=spirng-boot-rabbitmq
spring.rabbitmq.host=地址
spring.rabbitmq.port=端口
spring.rabbitmq.username=用户名
spring.rabbitmq.password=密码

数据发送

@Autowired
private AmqpTemplate rabbitTemplate;
private final Log logger = LogFactory.getLog(SendMessage.class);
public void send(String message) {
//第一个参数,交换机名称,第二个参数,routingkey,第三个参数,发送的数据
this.rabbitTemplate.convertAndSend("队列名","",message);
logger.info(message+"已经发送");
}

数据监听

//queues为渠道名,autoStartup为是否自动开启,id为该监听名字,containerFactory为这个监听的连接工厂(连接一个rabbitMQ时可以忽略)
@RabbitListener(queues ="acquire-alarm-volume", autoStartup= "false", id = "Message",containerFactory = "myFactory")
public void process(byte [] message) {
System.out.pring(new String(message))
}

上述代码使用的交换机,渠道可以通过rabbitMQ的web管理端手动设置,也可以使用代码声明
声明代码

/*
定义连接,rabbitMQ
*/
@Bean(name = "myConnectionFactory")
@Primary
public ConnectionFactory myConnectionFactory(
@Value("${spring.rabbitmq.my.host}") String host,
@Value("${spring.rabbitmq.my.port}") int port,
@Value("${spring.rabbitmq.my.username}") String username,
@Value("${spring.rabbitmq.my.password}") String password
) {
return connectionFactory(host, port, username, password);
}

public CachingConnectionFactory connectionFactory(String host,int port,String username,String password){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
//  connectionFactory.setVirtualHost(virtual_host);
return connectionFactory;
}

@Bean(name = "myRabbitTemplate")
@Primary
public RabbitTemplate myRabbitTemplate(
@Qualifier("myConnectionFactory") ConnectionFactory connectionFactory
) {
RabbitTemplate myRabbitTemplate = new RabbitTemplate(connectionFactory);
return myRabbitTemplate;
}

@Bean(name = "myFactory")
@Primary
public SimpleRabbitListenerContainerFactory myFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("myConnectionFactory") ConnectionFactory connectionFactory
) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
/*
声明交换机 amq.topic为Topic类型交换机
*/
@Bean
public TopicExchange basicExchange(){
return new TopicExchange("amq.topic", true,false);
}

/*
声明消息队列 启动创建,停止自动删除
*/
@Bean(name = "basicQueue")
public Queue basicQueue(){
return new Queue("acquire-alarm-volume", false,true,true);
}

/*
队列绑定交换机 *.*.*.*.*.*为routingkey
*/
@Bean
public Binding basicBinding(){
return BindingBuilder.bind(basicQueue()).to(basicExchange()).with("*.*.*.*.*.*");}

交换机与队列的声明代码,如果rabbitMQ中已经存在,那么声明里的各项参数,需与rabbitMQ中已经存在的设置参数相同,否则报错,在错误信息中很容易看出哪个参数是不匹配的。
如果在rabbitMQ中不存在声明的交换机和渠道,在程序启动时会自动创建,如果在声明参数中,自动删除属性为true,那么当程序运行停止时,队列会自动删除。

简单的实例如上,关于数据监听rabbitListener注解的使用会单独有一篇文章说明。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: