springboot整合rabbitmq
1.先引入Rabbitmq的starter
2.在Application.properties文件中配置rabbitmq
#rabbitmq主机地址
spring.rabbitmq.host=192.168.144.143
#rabbitmq端口号 spring.rabbitmq.port=5672
#rabbitmq用户名 spring.rabbitmq.username=guest
#rabbitmq密码 spring.rabbitmq.password=guest
#rabbitmq虚拟主机 spring.rabbitmq.virtual-host=/
3.因为springboot直接引入rabbitmq默认的序列化方式是jdk的即存入rabbitmq队列中的数据是字节数据。通常我们为了开发方便需要将其转换成json格式的存入rabbitmq服务器,所以我们需要编写一个配置类将其转换成json
package com.atguigu.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAMQPConfig {
/**
* 将存入rabbitmq队列中的序列化方式换成json序列化方式
* @return
*/
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
4.RabbitMQ常用方法
package com.atguigu;
import com.atguigu.vo.Book;
import org.junit.jupiter.api.Test;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.Exchange;
import org.springframework.amqp.core.FanoutExchange;
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 SpringbootRabbitmqApplicationTests {
@Autowired
RabbitTemplate rabbitTemplate;//用来发送和接收数据
@Autowired
AmqpAdmin amqpAdmin;//用来自动创建或删除 交换器,队列,绑定
@Test
void send() {
Map<String,Object> map=new HashMap<>();
map.put("msg","这是第一个消息");
map.put("data", Arrays.asList("hello world",123,true));
rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);//发送数据
}
@Test
public void receive(){
Object o = rabbitTemplate.receiveAndConvert("atguigu.news");//接收数据
System.err.println(o);
}
@Test
public void sendBook(){
Book book=new Book("三国演义","罗贯中");
rabbitTemplate.convertAndSend("exchange.fanout","hello",book);
}
@Test
public void receiveBook(){
Book book = (Book) rabbitTemplate.receiveAndConvert("atguigu.news");
System.err.println(book);
System.err.println(book.getBookName());
System.err.println(book.getAuthor());
}
@Test
public void createExchange(){
Exchange exchange=new FanoutExchange("java-exchange");
amqpAdmin.declareExchange(exchange);//以declare开头的方法都是创建,以delete或remove开头的方法都是删除
}
}
5.开启RabbitMQ注解模式
@EnableRabbit//开启rabbitmq注解模式
@SpringBootApplication
public class SpringbootRabbitmqApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootRabbitmqApplication.class, args);
}
}
6.在要监听的方法上使用@RabbitListener注解,监听的方法是写在业务层的
package com.atguigu; import com.atguigu.vo.Book; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.*; import org.springframework.stereotype.Service; @Service//监听的方法是写在业务层的 public class BookService { @RabbitListener(bindings = @QueueBinding(value = @Queue("atguigu.hello"),exchange = @Exchange("randout-exchange"),key = "atguigu"))//用来自动创建并监听RabbitMQ,value表示队列名称,exchange表示交换器,key表示路由键 public void receive01(Book book){//这里的book就是一个实体类,表示只获取数据 System.err.println("==================01==================="); System.err.println(book); } @RabbitListener(queuesToDeclare = @Queue("atguigu.java"))//用来监听RabbitMQ public void receive02(Message message){//这里的Message是amqp包的,里面包括消息属性 System.err.println("==================02==================="); System.err.println(message.getBody().toString()); //System.err.println(message.getMessageProperties()); } }
7.更多rabbitmq注解再百度

浙公网安备 33010602011771号