rocketMq消息的发送和消息消费
###一.消息推送
```java
public void pushMessage() {
String message = "推送消息内容!";
try {
DefaultMQProducer producer = new DefaultMQProducer(producerGroup);
// 设置NameServer地址
producer.setNamesrvAddr("服务器地址+端口号");
producer.setInstanceName("producer");
// 只需要在发送前初始化一次
producer.start();
// 构建消息实体
| Message msg = new Message(topic, |
| tag, |
| message.getBytes() |
| ); |
| SendResult sendResult = producer.send(msg); |
| System.out.printf("%s%n", sendResult); |
| producer.shutdown(); |
| } catch (Exception ex) { |
| ex.printStackTrace(); |
| } |
}
| |
| ###二.消息消费 |
| ```java |
| @Autowired |
| private MessageReceiveService messageReceiveService; |
| |
| @Value("${app.message.address}") |
| private String address; |
| |
| @Value("${app.message.topic}") |
| private String topic; |
| |
| @Value("${app.message.groupName}") |
| private String consumerGroup; |
| |
| |
| |
| |
| @PostConstruct |
| public void init() { |
| try { |
| DefaultMQPushConsumer consumer = new DefaultMQPushConsumer(consumerGroup); |
| consumer.setNamesrvAddr(address); |
| consumer.subscribe(topic, "*"); |
| consumer.registerMessageListener(messageReceiveService); |
| consumer.start(); |
| logger.info("rocketMQ consumer start"); |
| } catch (Exception e) { |
| logger.error("reocketMQ consumer start error!", e); |
| e.printStackTrace(); |
| } |
| } |
| @Service |
| public class MessageReceiveService implements MessageListenerConcurrently { |
| |
| private static Logger logger = LoggerFactory.getLogger(MessageReceiveService.class); |
| |
| @Value("${accept_system_interface}") |
| private String acceptSystemInterface; |
| |
| |
| |
| |
| |
| |
| |
| |
| @Override |
| public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { |
| |
| return handleHcpMessage(msgs, context); |
| } |
| |
| |
| |
| |
| |
| |
| |
| @Transactional(rollbackFor = {RuntimeException.class}) |
| private ConsumeConcurrentlyStatus handleHcpMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) { |
| for (MessageExt msg : msgs) { |
| |
| String message = null; |
| try { |
| |
| message = new String(msg.getBody(),"utf-8"); |
| }catch (Exception e){ |
| e.printStackTrace(); |
| errorLogSave(message,"当前消息转化utf-8出现异常信息"); |
| return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; |
| } |
| |
| ... |
| } |
| return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; |
| } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理