springboot整合rabbitMQ

1.新建工程
使用idea中的springboot初始化器新建工程,选rabbitmq和web依赖;
 
2.yml配置
spring:
  rabbitmq:
    host: 192.168.1.38
    username: guest         #rabbitmq默认用户名和密码都是guest
    password: guest
 
3.发送消息
junit测试代码:
    使用RabbitTemplate来操作RabbitMQ发送消息;
    RabbitTemplate的实例被RabbitMQ的自动配置类注入ioc容器,可以用@Autowired自动装配;       
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRedis {
    @Autowired
    private RabbitTemplate  template;
 
    @Test
    public void testDirect(){
        Map<String, Object> msg = new HashMap<>();
        msg.put("name", "诸葛孔明");
        msg.put("job", "丞相");
        msg.put("words", "我从未见过有如此厚颜无耻之人");
 
        //参数:交换器名、路由键、消息
        template.convertAndSend("exchanger.direct", "cat.voice", msg);
    }
}
 
结果:
    消息队列中新增了一条消息,但默认使用的是jdk提供的序列化器来序列化消息对象的;    
 
4.接收消息
代码:
@Test
public void receiveDirect(){
    //参数:队列名
    Object msg = template.receiveAndConvert("cat.voice");
    System.out.println(msg);
}
 
结果:
    消息队列中的消息已被取出;队列里少了一条消息;
 
5.以json的格式发送消息
原理:只需要在ioc容器中放一个消息转换器,用来替换默认的amqp消息转换器即可;
步骤:新建一个配置类,用@Bean想ioc容器中添加组件    
消息转换器类:org.springframework.amqp.support.converter.MessageConverter
 
配置类:
@Configuration
public class RabbitConfig {
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();    
    }
}
 
发送消息测试:
    队列新增了一条消息,以json格式保存;
 
6.消息监听器
比如两个系统通过rabbitmq做数据交互;
订单系统发送消息,库存系统需要监听消息,然后做相关操作;
也就是说消息的消费者需要监听消息队列,只要队列中有消息进来就需要做一些操作;
 
开启rabbitmq注解模式:
    在工程启动类中添加注解
@EnableRabbit
 
业务类:
    使用@RabbitListener注解监听队列
@Service
public class RabbitService {
 
    //监听队列cat.voice
    @RabbitListener(queues = "cat.voice")
    public void listenRabbit(Object msg){
        System.out.println("收到消息:"+ msg);
    }
}
 
发送消息测试:
    发送的消息被业务类消费,队列中没有消息;
 
7.使用AmqpAdmin管理交换器、绑定规则、队列
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestRabbit {
    @Autowired
    private AmqpAdmin admin;
 
    //创建exchange
    @Test
    public void createExchange(){
        admin.declareExchange(new DirectExchange("amqp.admin.exchange"));
    }
 
    //创建队列
    @Test
    public void createQueue(){
        admin.declareQueue(new Queue("amqp.admin.queue"));
    }
 
    //创建绑定
    @Test
    public void createBinding(){
        admin.declareBinding(new Binding("amqp.admin.queue",
                Binding.DestinationType.QUEUE,
                "amqp.admin.exchange",
                "routing.key",
                null
            )
        );
    }
}
 
 
 
 
 
posted @ 2020-06-19 09:00  L丶银甲闪闪  阅读(319)  评论(0编辑  收藏  举报