目录
一、服务如何安装rabbitmqdocker 安装 rabbitmq
一、服务如何安装rabbitmq
docker 安装 rabbitmq_282162974838632的博客-优快云博客
https://blog.youkuaiyun.com/qq_51767561/article/details/127462422?spm=1001.2014.3001.5501
二、导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
三、配置文件内容
#RabbitMq所在服务器IP
spring.rabbitmq.host=127.0.0.1
#连接端口号
spring.rabbitmq.port=5672
#用户名
spring.rabbitmq.username=root
#用户密码
spring.rabbitmq.password=123456
#消息队列名
rabbitmq.queue.name=queue1
四、配置类
@Configuration(proxyBeanMethods = false)
public class AppBean {
@Value("${spring.rabbitmq.host}")
private String host;
@Value("${spring.rabbitmq.port}")
private int port;
@Value("${spring.rabbitmq.username}")
private String username;
@Value("${spring.rabbitmq.password}")
private String password;
@Value(value = "${rabbitmq.queue.name}")
private String queueName;
/**
* 创建一个消息队列
*/
@Bean
public Queue helloQueue() {
return new Queue(queueName);
}
@Bean
RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory, Jackson2JsonMessageConverter converter) {
RabbitTemplate template = new RabbitTemplate();
template.setConnectionFactory(connectionFactory);
template.setMessageConverter(converter);
return template;
}
/**
* 使用 Jackson 转化器原因:
* 1. 使数据在远程以json的形式保存
* 2. 使不同的客户端接受相同类型的数据时,使数据能正常转换
*/
@Bean
Jackson2JsonMessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean(name = "connectionFactory")
public ConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host, port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
return connectionFactory;
}
}
五、用户类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User implements Serializable {
private String name;
private String description;
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createBy;
}
六、发送类
@Service
public class SenderService {
@Autowired
private RabbitTemplate rabbitTemplate;
public boolean send(String queue, User user) {
MessagePostProcessor message= new MessagePostProcessor() {
/**
* 设置消息头中的消息
*/
@Override
public Message postProcessMessage(Message message) throws AmqpException {
message.getMessageProperties().setHeader("headMsg","wjy");
// User类自动转化位字符串类型
message.getMessageProperties().setHeader("headContent",user);
return message;
}
};
System.out.println("send: "+queue + " : " + user);
rabbitTemplate.convertAndSend(queue,user, message);
return true;
}
}
七、接收类
@Service
public class ReceiverService {
/**
* @RabbitListener(queues = "queue1") 表示监听的消息队列名为 “queue1”
* @Payload 表示接受消息体的消息
* @Header 表示接受消息头的消息 ,消息头只能接受 string 类型参数
*/
@RabbitListener(queues = "queue1")
public void process1(@Payload User user, @Header(name = "headMsg") String headMsg, @Header(name = "headContent") String headContent) {
System.out.println("Receiver1 body: " + user);
System.out.println("Receiver1 head headMsg : " + headMsg);
System.out.println("Receiver1 head headContent : " + headContent);
}
}
八、Api类
@RestController
@RequestMapping("/rabbitmq")
public class RabbitmqApi {
@Autowired
private SenderService sender;
@GetMapping("/sender/{queue}/{name}/{des}")
public boolean sender(@PathVariable("queue") String queue, @PathVariable("name") String name, @PathVariable("des") String des) {
User user = new User(name, des, LocalDateTime.now());
System.out.println(user);
return sender.send(queue, user);
}
}