1.rabbitMQ安装配置
#docker安装rabbitmq
[root@docker 桌面]# docker pull rabbitmq:3-management
#dockerrabbitmq
[root@docker 桌面]# docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:3-management
#查看容器,安装运行成功
[root@docker 桌面]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c618c06457e2 rabbitmq:3-management "docker-entrypoint.s 27 seconds ago Up 5 seconds 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp goofy_hawking
f12e72d71f87 mysql:5.5 "docker-entrypoint.s 2 hours ago Up 2 hours 0.0.0.0:12345->3306/tcp ecstatic_hoover
a257a2002919 redis "docker-entrypoint.s 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp adoring_jones
2.rabbitMQ测试
浏览器访问:
http://192.168.254.129:15672/
登录
用户名:guest
密码:guest
(1)添加交换器:
(2)添加队列:
(3)交换器绑定队列:
(4)交换器给队列发送消息:
(5)队列接收消息:
(6)队列删除消息:
3.RabbitTemplate发送、接收消息&序列化机制
book类:
package com.atguigu.springboot.bean;
public class Book {
private String bookName;
private String author;
public Book() {
}
public Book(String bookName, String author) {
this.bookName = bookName;
this.author = author;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
自定义序列化配置类:
package com.atguigu.springboot.config;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAMQPConfig {
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template = new RabbitTemplate(connectionFactory);
template.setMessageConverter(new Jackson2JsonMessageConverter());
return template;
}
}
发送消息和接收消息测试:
package com.atguigu.springboot;
import com.atguigu.springboot.bean.Book;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@SpringBootTest
class Springboot02AmpqApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;
//以单播形式发送数据
@Test
void contextLoads() {
Map<String,Object> map=new HashMap<>();
map.put("msg","这是第一条消息");
map.put("data", Arrays.asList("helloworld",123,true));
//对象被序列化之后发送出去
rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);
//rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",new Book("西游记","吴承恩"));
}
//接收数据,将数据自动转换为json发送出去
@Test
public void recerive(){
Object o = rabbitTemplate.receiveAndConvert("atguigu.news");
System.out.println(o.getClass());
System.out.println(o);
}
//广播形式发送消息
@Test
public void send(){
rabbitTemplate.convertAndSend("exchange.fanout","",new Book("三国演义","罗贯中"));
}
}
数据发送成功:
4.@RabbitListener,@EnableRabbit监听消息队列(有点问题,后面处理)
package com.atguigu.springboot;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnableRabbit//开启基于注解的rabbitMQ
@SpringBootApplication
public class Springboot02AmpqApplication {
public static void main(String[] args) {
SpringApplication.run(Springboot02AmpqApplication.class, args);
}
}
package com.atguigu.springboot.service;
import com.atguigu.springboot.bean.Book;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Service;
@Service
public class BookService {
//这个有问题
@RabbitListener(queues = "atguigu.news")
public void lisener(Book book){
System.out.println("收到消息:"+book);
}
@RabbitListener(queues = "atguigu")
public void receive(Message message){
System.out.println(message.getBody());
System.out.println(message.getMessageProperties());
}
}
5.AmqpAdmin
AmqpAdmin:创建和删除 Queue、Exchange、Binding
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createExchange(){
amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
System.out.println("创建Exchange完成!");
amqpAdmin.declareQueue(new Queue("amqpadmin.queue"));
System.out.println("创建Queue完成!");
//创建绑定
amqpAdmin.declareBinding(new Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null));
}