引入依赖
<!--rabbitmq依赖(spring版本为4.0.2.RELEASE) -->
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<version>1.3.5.RELEASE</version>
</dependency>
创建一个Rabbitmq配置文件(rabbit-config.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:rabbit="http://www.springframework.org/schema/rabbit"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/rabbit
http://www.springframework.org/schema/rabbit/spring-rabbit-1.2.xsd">
<!--配置connection-factory,指定连接rabbit server参数 -->
<rabbit:connection-factory id="connectionFactory" username="guest"
password="guest" host="127.0.0.1" port="5672"/>
<!--通过指定下面的admin信息,当前producer中的exchange和queue会在rabbitmq服务器上自动生成 -->
<rabbit:admin id="connectAdmin" connection-factory="connectionFactory" />
<!--定义queue队列 -->
<rabbit:queue name="queueTest" durable="true" auto-delete="false" exclusive="false" declared-by="connectAdmin" />
<!--定义queue队列 -->
<rabbit:queue name="queueTest1" durable="true" auto-delete="false" exclusive="false" declared-by="connectAdmin" />
<!-- 定义direct exchange(也就是交换机),绑定queueTest队列(queueTest名称可以自定义) -->
<rabbit:direct-exchange name="exchangeTest" durable="true" auto-delete="false" declared-by="connectAdmin">
<rabbit:bindings>
<!--绑定定义好的队列(可绑定多个)-->
<rabbit:binding queue="queueTest" key="queueTestKey"></rabbit:binding>
<rabbit:binding queue="queueTest1" key="queueTestKey1"></rabbit:binding>
</rabbit:bindings>
</rabbit:direct-exchange>
<!--定义rabbit template用于数据的接收和发送 将amqpTemplate对象绑定exchange中交换机-->
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="exchangeTest" />
<!-- 消息接收者 -->
<bean id="messageReceiver" class="com.service.MessageConsumer"></bean>
<!-- queue litener 观察 监听模式 当有消息到达时会通知监听在对应的队列上的监听对象,acknowledge="manual"设置消息手动确认
,prefetch 设置消息限流(1.0版本默认为1条,2.0版本默认为250条,设置后执行完后剩余消息才会进行接收,设置多少按照项目情况自行设置) -->
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual" prefetch="100">
<rabbit:listener queues="queueTest" ref="messageReceiver" />
<rabbit:listener queues="queueTest1" ref="messageReceiver" />
</rabbit:listener-container>
</beans>
在配置文件spring-content.xml中引入rabbitmq的配置文件
<import resource="classpath*:rabbit-config.xml" />
定义消息生产者类
/**
* @author 消息生产者
* @Package
* @date 2023/10/08 15:55
*/
@Service("MessageProducer")
public class MessageProducer {
//引入AmqpTemplate对象,配置文件中定义好绑定的交换机
@Resource(name = "amqpTemplate")
private AmqpTemplate amqpTemplate;
//发送登录消息方法
public void sendLoginMessage(Object message) throws IOException {
amqpTemplate.convertAndSend("queueTestKey", message);
}
//发送退出登录消息方法
public void sendOutMessage(Object message) throws IOException {
amqpTemplate.convertAndSend("queueTestKey1", message);
}
}
定义消息消费者
/**
* @author 消息消费者
* @Package
* @date 2023/10/8 15:53
*/
public class MessageConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
System.out.println("message------->:" + new String(message.getBody(), Charset.forName("utf-8")));
}
}
定义测试接口
/**
* 接口
*/
@Controller
@RequestMapping("/api")
public class ApiController extends MyControl {
@Autowired
private MessageProducer messageProducer;
@RequestMapping(value = "/getTestMq")
@ResponseBody
public Result getTestMq(HttpServletRequest request) throws IOException {
messageProducer.sendLoginMessage("登录成功");
messageProducer.sendOutMessage("退出登录");
return Result.success("测试成功");
}
}