1.pom依赖引入:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.6.1</version>
</dependency>
2.yml配置文件:
#rabbitMq 配置
spring:
rabbitmq:
# 主机
host: 182.92.153.8
# 端口
port: 5672
# 用户名
username: admin
# 密码
password: admin
# 虚拟host
virtual-host: /
3.RabbitMQConfig配置类:
package com.zhigong.heavenearth.config;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.listener.RabbitListenerContainerFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class RabbitMQConfig {
@Value("${spring.rabbitmq.host}")
private String selfHost;
@Value("${spring.rabbitmq.port}")
private Integer selfPort;
@Value("${spring.rabbitmq.username}")
private String selfUsername;
@Value("${spring.rabbitmq.password}")
private String selfPassword;
@Value("${spring.rabbitmq.virtual-host}")
private String selfVirtualHost;
@Bean(name = "selfConnectionFactory")
@Primary
public ConnectionFactory selfConnectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setHost(selfHost);
cachingConnectionFactory.setPort(selfPort);
cachingConnectionFactory.setUsername(selfUsername);
cachingConnectionFactory.setPassword(selfPassword);
cachingConnectionFactory.setVirtualHost(selfVirtualHost);
return cachingConnectionFactory;
}
@Bean(name = "selfRabbitListenerContainerFactory")
public RabbitListenerContainerFactory selfRabbitListenerContainerFactory(@Qualifier("selfConnectionFactory") ConnectionFactory connectionFactory) {
SimpleRabbitListenerContainerFactory simpleRabbitListenerContainerFactory = new SimpleRabbitListenerContainerFactory();
simpleRabbitListenerContainerFactory.setConnectionFactory(connectionFactory);
return simpleRabbitListenerContainerFactory;
}
@Bean(name = "selfRabbitTemplate")
public RabbitTemplate selfRabbitTemplate(@Qualifier("selfConnectionFactory") ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
return rabbitTemplate;
}
@Bean(name = "selfRabbitAdmin")
public RabbitAdmin selfRabbitAdmin(@Qualifier("selfConnectionFactory") ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
}
4.生产者:
package com.zhigong.heavenearth.service;
import cn.hutool.json.JSONUtil;
import com.zhigong.heavenearth.common.Result;
import com.zhigong.heavenearth.mapper.SkillStudyPlanMapper;
import com.zhigong.heavenearth.dto.SkillStudyPlanDTO;
import com.zhigong.heavenearth.pojo.SkillStudyPlan;
import com.zhigong.heavenearth.pojo.UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service
public class SkillStudyPlanService {
@Resource
private SkillStudyPlanMapper skillStudyPlanMapper;
@Resource
private RedisTemplate redisTemplate;
@Resource
private RabbitTemplate rabbitTemplate;
public Result insertPlan(SkillStudyPlanDTO skillStudyPlanDTO) {
return Result.success();
}
public void selectAll() {
rabbitTemplate.convertAndSend("TEST_MESSAGE", "测试");
UserInfo userInfo = new UserInfo();
userInfo.setAccountId("1");
userInfo.setRemark("test");
rabbitTemplate.convertAndSend("TEST_BEAN", userInfo);
rabbitTemplate.convertAndSend("TEST_BEAN_JSON", JSONUtil.toJsonStr(userInfo));
}
}
5.消费者:
package com.zhigong.heavenearth.listener;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.json.JSONUtil;
import com.zhigong.heavenearth.pojo.UserInfo;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
public class RabbitMQListener {
@RabbitListener(queues = ("TEST_MESSAGE"))
public void processMessage(Message message) {
String msg = new String(message.getBody());
System.out.println(msg);
}
@RabbitListener(queuesToDeclare = @Queue("TEST_BEAN"))
public void processMessageBean(UserInfo userInfo) {
System.out.println(userInfo);
}
@RabbitListener(queuesToDeclare = @Queue("TEST_BEAN_JSON"))
public void processMessageJson(Message message) {
System.out.println(message);
String msg = new String(message.getBody());
System.out.println(msg);
UserInfo userInfo = JSONUtil.toBean(msg, UserInfo.class);
System.out.println(userInfo);
}
}