本文所介绍环境为win7环境下运行, 从官方github中(https://github.com/alibaba/RocketMQ)下载RocketMQ-master.zip,版本为v3.5.8,解压并进入根目录,运行命令install.bat, 安装完成后进入目录\target\alibaba-rocketmq-broker\alibaba-rocketmq\bin,打开两个命令行窗口,分别使用以下命令启动rocketmq

启动nameserver
mqnamesrv.exe
启动broker
mqbroker -n 127.0.0.1:9876

1、编写pom.xml,

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.hode</groupId>
<artifactId>rocketmq</artifactId>
<version>0.0.1-SNAPSHOT</version> <properties>
<spring.version>4.3.2.RELEASE</spring.version>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<rocketmq.version>3.2.6</rocketmq.version>
<slf4j.version>1.7.12</slf4j.version>
</properties> <dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency> <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency> <dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency> <dependency>
<groupId>com.alibaba.rocketmq</groupId>
<artifactId>rocketmq-client</artifactId>
<version>${rocketmq.version}</version>
</dependency> <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<scope>test</scope>
</dependency> </dependencies> <build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin> </plugins>
</build> </project>

2、编写spring配置文件applicationContext-consumer.xml,applicationContext-producer.xml以及log4j.properties,内容如下

applicationContext-consumer.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <bean id="producer" class="com.hode.rocketmq.Consumer" init-method="init" destroy-method="destroy">
<constructor-arg name="consumerGroup" value="rocketmq-test" />
<constructor-arg name="namesrvAddr" value="127.0.0.1:9876" />
<constructor-arg name="instanceName" value="test" />
<constructor-arg name="topic" value="testTopic" />
<constructor-arg name="messageListener" ref="messageListener" />
</bean> <bean id="messageListener" class="com.hode.rocketmq.StringMessageListener" /> </beans>

applicationContext-producer.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd"> <bean id="producer" class="com.hode.rocketmq.Producer" init-method="init" destroy-method="destroy">
<constructor-arg name="producerGroup" value="rocketmq-test" />
<constructor-arg name="namesrvAddr" value="127.0.0.1:9876" />
<constructor-arg name="instanceName" value="test" />
</bean> </beans>

log4j.properties

log4j.rootLogger=INFO,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%-4r %d{yyyy-MM-dd HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n log4j.logger.com.hode=DEBUG

3、编写类StringMessageListener.java,Producer.java,Consumer.java

StringMessageListener.java

import java.util.List;

import org.apache.log4j.Logger;

import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import com.alibaba.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.common.message.MessageExt; public class StringMessageListener implements MessageListenerConcurrently{ private Logger log = Logger.getLogger(getClass()); @Override
public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs,ConsumeConcurrentlyContext context) {
for (MessageExt msg : msgs) {
log.info("msg : " + new String(msg.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
} }

Producer.java

import org.apache.log4j.Logger;

import com.alibaba.rocketmq.client.exception.MQClientException;
import com.alibaba.rocketmq.client.producer.DefaultMQProducer; /**
* 生产
*/
public class Producer { protected Logger log = Logger.getLogger(getClass()); private String producerGroup; private String namesrvAddr; private String instanceName; private DefaultMQProducer producer; public DefaultMQProducer getProducer() {
return producer;
} public Producer(String producerGroup,String namesrvAddr,String instanceName){
this.producerGroup = producerGroup;
this.namesrvAddr = namesrvAddr;
this.instanceName = instanceName;
} public void init() throws MQClientException{
log.info("start init DefaultMQProducer...");
producer = new DefaultMQProducer(producerGroup);
producer.setNamesrvAddr(namesrvAddr);
producer.setInstanceName(instanceName);
producer.start();
log.info("DefaultMQProducer init success.");
} public void destroy(){
log.info("start destroy DefaultMQProducer...");
producer.shutdown();
log.info("DefaultMQProducer destroy success.");
} }

Consumer.java

import org.apache.log4j.Logger;

import com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;
import com.alibaba.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import com.alibaba.rocketmq.common.consumer.ConsumeFromWhere; public class Consumer { private Logger log = Logger.getLogger(getClass()); private DefaultMQPushConsumer consumer; private String consumerGroup; private String namesrvAddr; private String instanceName; private String topic; private MessageListenerConcurrently messageListener; public Consumer(String consumerGroup,String namesrvAddr,String instanceName,String topic,MessageListenerConcurrently messageListener){
this.consumerGroup = consumerGroup;
this.namesrvAddr = namesrvAddr;
this.instanceName = instanceName;
this.topic = topic;
this.messageListener = messageListener;
} public void init() throws Exception{
log.info("start init DefaultMQPushConsumer...");
consumer = new DefaultMQPushConsumer(consumerGroup);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET); //从队列头部开始消费
consumer.setNamesrvAddr(namesrvAddr);
consumer.setInstanceName(instanceName);
consumer.subscribe(topic, "*");
consumer.registerMessageListener(messageListener);
consumer.start();
log.info("DefaultMQPushConsumer init ok.");
} public void destroy(){
log.info("start destroy DefaultMQPushConsumer...");
consumer.shutdown();
log.info("DefaultMQPushConsumer destroy success.");
} public DefaultMQPushConsumer getConsumer() {
return consumer;
} }

4、编写测试类

ProducerTest.java

import java.util.Date;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.rocketmq.client.producer.DefaultMQProducer;
import com.alibaba.rocketmq.client.producer.SendCallback;
import com.alibaba.rocketmq.client.producer.SendResult;
import com.alibaba.rocketmq.common.message.Message; public class ProducerTest { private static Logger log = Logger.getLogger(ProducerTest.class); private static ApplicationContext context; public static void main(String[] args) throws Exception{
context = new ClassPathXmlApplicationContext("classpath:applicationContext-producer.xml");
Producer producer = context.getBean(Producer.class);
DefaultMQProducer p = producer.getProducer(); String message = "test messgae"+new Date();
Message msg = new Message("testTopic",message.getBytes());
log.info(message);
p.send(msg, new SendCallback(){ @Override
public void onSuccess(SendResult sendResult) {
log.info(sendResult.getSendStatus().name());
log.info("onSuccess"); producer.destroy();
} @Override
public void onException(Throwable e) {
log.error("onException");
}
}); } }

ConsumerTest.java

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class ConsumerTest { private static ApplicationContext context; public static void main(String[] args) throws Exception{
context = new ClassPathXmlApplicationContext("classpath:applicationContext-consumer.xml");
Consumer consumer = context.getBean(Consumer.class); Thread.sleep(20*1000); System.out.println("end");
consumer.destroy();
} }

分别运行生产端及消费端完成测试,结束。

Spring + RocketMQ使用的更多相关文章

  1. 问题排查之'org.apache.rocketmq.spring.starter.core.RocketMQTemplate' that could not be found.- Bean method 'rocketMQTemplate' in 'RocketMQAutoConfiguration' not loaded.

    背景 今天将一个SpringBoot项目的配置参数从原有的.yml文件迁移到Apollo后,启动报错“Bean method 'rocketMQTemplate' in 'RocketMQAutoCo ...

  2. 如何在优雅地Spring 中实现消息的发送和消费

    本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...

  3. Spring 整合 RocketMQ

    1. 引入jar包 <!-- RocketMQ --> <dependency> <groupId>com.alibaba.rocketmq</groupId ...

  4. Spring boot实战项目整合阿里云RocketMQ (非开源版)消息队列实现发送普通消息,延时消息 --附代码

    一.为什么选择RocketMQ消息队列? 首先RocketMQ是阿里巴巴自研出来的,也已开源.其性能和稳定性从双11就能看出来,借用阿里的一句官方介绍:历年双 11 购物狂欢节零点千万级 TPS.万亿 ...

  5. Spring Cloud异步场景分布式事务怎样做?试试RocketMQ

    一.背景 在微服务架构中,我们常常使用异步化的手段来提升系统的 吞吐量 和 解耦 上下游,而构建异步架构最常用的手段就是使用 消息队列(MQ),那异步架构怎样才能实现数据一致性呢?本文主要介绍如何使用 ...

  6. Spring Cloud Alibaba(五)RocketMQ 异步通信实现

    本文探讨如何使用 RocketMQ Binder 完成 Spring Cloud 应用消息的订阅和发布. 介绍 RocketMQ 是一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的.高 ...

  7. 通过消息总线Spring Cloud Bus实现配置文件刷新(使用Kafka或RocketMQ)

    如果需要客户端获取到最新的配置信息需要执行refresh,我们可以利用webhook的机制每次提交代码发送请求来刷新客户端,当客户端越来越多的时候,需要每个客户端都执行一遍,这种方案就不太适合了.使用 ...

  8. Spring Cloud Alibaba学习笔记(14) - Spring Cloud Stream + RocketMQ实现分布式事务

    发送消息 在Spring消息编程模型下,使用RocketMQ收发消息 一文中,发送消息使用的是RocketMQTemplate类. 在集成了Spring Cloud Stream之后,我们可以使用So ...

  9. Spring Cloud Alibaba学习笔记(11) - RocketMQ事务消息

    在Spring中,我们要实现事务,一般通过@Transactional注解实现.这在引入RocketMQ之前没有问题,但是在引入了RocketMQ之后,如果消息发送之后的业务逻辑处理发生了异常的话,这 ...

随机推荐

  1. TopFreeTheme精选免费模板【20130704】

    今天我们给大家分享10个最新的主题模板,6款WordPress主题,3款Joomla模板,1款Magento主题.它们分别来自ThemeForest,RocketTheme,YooTheme.有需要的 ...

  2. kafka 0.11.0.3 源码编译

    首先下载 kafka 0.11.0.3 版本 源码: http://mirrors.hust.edu.cn/apache/kafka/0.11.0.3/ 下载源码 首先安装 gradle,不再说明 1 ...

  3. Spring Boot:整合Swagger文档

    综合概述 spring-boot作为当前最为流行的Java web开发脚手架,越来越多的开发者选择用其来构建企业级的RESTFul API接口.这些接口不但会服务于传统的web端(b/s),也会服务于 ...

  4. spring cloud 系列第1篇 —— eureka 服务的注册与发现 (F版本)

    源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.eureka 简介 Spring Cloud Eureka使用Netflix ...

  5. vSphere Client克隆虚拟机

    免费的VMWare ESXi5.5非常强大,使用ESXi经常会遇到这样的问题,我需要建立多个虚拟机,系统一个一个安装很麻烦.VMware ESXi.VMware vCenter Server 和 vS ...

  6. 简单的python爬虫实例

    目标网站:https://www.quanjing.com/category/1286521/2.html 爬取搜索出来的所有“中东人”的图片: 先看一下源代码,找到存放图片链接的地方,在源代码最下面 ...

  7. C++ 洛谷 P1879 [USACO06NOV]玉米田Corn Fields

    没学状压DP的看一下 合法布阵问题  P1879 [USACO06NOV]玉米田Corn Fields 题意:给出一个n行m列的草地(n,m<=12),1表示肥沃,0表示贫瘠,现在要把一些牛放在 ...

  8. Linux嵌入式kgdb调试环境搭建

    ======================= 我的环境 ==========================PC 端: win7 + vmware-15 ubuntu16.04开发板:Freesca ...

  9. 5分钟完成mysql离线安装

    1. 场景描述 mysql离线安装并不复杂,就是经常会出现漏东西,有时候的搞半天,总结下,快速离线安装mysql,直接把下面的命令敲一遍就好,5-10分钟就能安装好. 2. 解决方案 安装的mysql ...

  10. bzoj3125: CITY 题解

    3125: CITY Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 486  Solved: 213[Submit][Status][Discuss] ...