首先下载RocketMQ(在Windows上部署非常简单)
点我下载.
下载下来rocketmq-all-4.3.2-bin-release.zip解压
然后进入rocketmq-all-4.3.2-bin-release文件夹下的bin目录
进入命令行cmd,按顺序执行语句
执行如下命令如下图显示:(注意启动顺序)(启动后cmd窗口不能关闭)
1.启动mqnamesrv: start mqnamesrv.cmd
2.启动mqbroker: mqbroker -n localhost:9876 autoCreateTopicEnable=true
好了,到此我们部署就结束了,接下来是可视化
可以去这里下载
下载: https://codeload.github.com/apache/rocketmq-externals/zip/master.
注意,这里是下载到windows,我们的本机
下载好后进入这个文件夹rocketmq-externals-master\rocketmq-console,用cmd执行编译命令
mvn clean package -Dmaven.test.skip=true
然后进入rocketmq-externals-master\rocketmq-console\target文件夹,进行启动这里启动的是8080端口
java -jar rocketmq-console-ng-2.0.0.jar --server.port=8080 --rocketmq.config.namesrvAddr=你的公网ip地址:9876
这样RocketMQ就搭建好了,接下来是Springboot项目,
首先创建provider项目项目名rocketmq-provider
pom.xml:(这是需要的依赖)
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot</artifactId>
<version>2.0.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.29</version>
</dependency>
</dependencies>
application.yml
rocketmq:
name-server: 127.0.0.1:9876 #公网ip
producer:
group: my_group
ProducerController
import com.feker.rocketmq.producer.entity.User;
import com.feker.rocketmq.producer.service.ProducerService;
import org.apache.rocketmq.client.producer.SendResult;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
/**
* @创建人 FengKe
* @创建时间 ${DATA} 13:47
* @描述
*/
@RestController
@RequestMapping("/producer")
public class ProducerController {
@Resource
ProducerService producerService;
@ResponseBody
@PostMapping("/string")
public SendResult sendString(@RequestBody String message){
return producerService.sendString(message);
}
@ResponseBody
@PostMapping("/user")
public SendResult sendUser(@RequestBody User user){
return producerService.sendUser(user);
}
}
User:
/**
* @创建人 FengKe
* @创建时间 ${DATA} 13:46
* @描述
*/
public class User {
private String userName;
private Byte userAge;
// setter getter 略
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Byte getUserAge() {
return userAge;
}
public void setUserAge(Byte userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userAge=" + userAge +
'}';
}
}
ProducerService:
import com.feker.rocketmq.producer.entity.User;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
* @创建人 FengKe
* @创建时间 ${DATA} 13:46
* @描述
*/
@Service
public class ProducerService {
private Logger logger = LoggerFactory.getLogger(getClass());
@Autowired
private RocketMQTemplate mqTemplate;
private String springTopic = "string-topic";
private String userTopic ="user-topic";
public SendResult sendString(String message) {
// 发送 String 类型的消息
// 调用 RocketMQTemplate 的 syncSend 方法
SendResult sendResult = mqTemplate.syncSend(springTopic, message);
logger.info("syncSend String to topic {} sendResult={} \n", springTopic, sendResult);
return sendResult;
}
public SendResult sendUser(User user) {
// 发送 User
SendResult sendResult = mqTemplate.syncSend(userTopic, user);
logger.info("syncSend User to topic {} sendResult= {} \n", userTopic, sendResult);
return sendResult;
}
}
provider创建完成,完全按照我的这样就行,不用去改
接下来是创建customer,项目名是rocketmq-customer
pom.xml
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-commons</artifactId>
<version>1.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot</artifactId>
<version>2.0.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
</dependencies>
application.yml
spring:
main:
web-application-type: none #不启动web容器
rocketmq:
name-server: 127.0.0.1:9876 #公网ip
producer:
group: my_group
User:
/**
* @创建人 FengKe
* @创建时间 ${DATA} 13:46
* @描述
*/
public class User {
private String userName;
private Byte userAge;
// setter getter 略
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public Byte getUserAge() {
return userAge;
}
public void setUserAge(Byte userAge) {
this.userAge = userAge;
}
@Override
public String toString() {
return "User{" +
"userName='" + userName + '\'' +
", userAge=" + userAge +
'}';
}
}
StringConsumer:
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
@Service
@RocketMQMessageListener(topic = "string-topic", consumerGroup = "string_consumer")
public class StringConsumer implements RocketMQListener<String> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void onMessage(String message) {
// 重写消息处理方法
logger.info("------- StringConsumer received:{} \n", message);
// TODO:对接收的消息作处理
}
}
UserConsumer:
import com.feker.rocketmq.customer.entity.User;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* @创建人 FengKe
* @创建时间 ${DATA} 13:57
* @描述
*/
@Service
@RocketMQMessageListener(topic = "user-topic", consumerGroup = "user_consumer")
public class UserConsumer implements RocketMQListener<User> {
private Logger logger = LoggerFactory.getLogger(getClass());
@Override
public void onMessage(User user) {
logger.info("######## user_consumer received: {} ; age: {} ; name: {} \n", user,user.getUserAge(),user.getUserName());
// TODO:对接收的消息作处理
}
}
好了customer结束了
如果报错的话自己调整一下
接下来你可以用postman测试一下producer的那俩个Controller接口就可以看到返回的信息了