手把手教你SpringBoot集成RocketMq5.0,gRPC协议

手把手教你SpringBoot集成RocketMq5.0,gRPC协议,重点是代码

rocketMq5.0没有找到比较规范、可使用的使用gRpc协议的文章,这里也是试了很久才调通。

JDK1.8+安装配置

很早之前安装的,可能有问题,安装失败联系我

  1. 阿里云盘连接
  2. 安装完后配置环境变量
    在这里插入图片描述
    在这里插入图片描述
  3. 验证 javac成功才算是配置成功
    在这里插入图片描述
    在这里插入图片描述

rocketmq安装配置

RocketMq官网

  1. 下载二进制版本
    在这里插入图片描述
  2. 配置环境变量
    在这里插入图片描述
    路径
    在这里插入图片描述
  3. 具体需要配置的
    bin->runserver.cmd
    第一个非必改(rocketmq自带配置较大)根据个人电脑配置
    -Xms256m -Xmx256m -Xmn128m
    第二个需要查看是否带双引号
    在这里插入图片描述
    bin->runbroker.cmd
    第一个非必改(rocketmq自带配置较大)根据个人电脑配置
    -Xms256m -Xmx256m -Xmn128m
    第二个需要查看是否带双引号,有些电脑不带双引号会闪退,我的好像不会,公司服务器会
    在这里插入图片描述
    conf->broker.conf (亲测改不改没用,启动还要加)
    在这里插入图片描述
    conf->rmq-proxy.json
    proxy代理端口
{
  "rocketMQClusterName": "DefaultCluster",
  "remotingListenPort":28080,
  "grpcServerPort":28081
}
  1. 启动 bin->cmd (第二个不这样写,第三个起不来,报错)
    start mqnamesrv.cmd
    start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
    start mqproxy.cmd -n 127.0.0.1:9876

rocketmq-dashboard可视化安装

RocketMq官网
在这里插入图片描述
maven编译,maven安装省略,不会百度,再不会建议转行
需修改的application.yml(端口自定义,别被占用)
在这里插入图片描述
MessageServiceImpl.java(去掉+1,新版本不修改,所有的数据都显示两条,阿里群找的答案,都是大佬,钉钉群21982288)
在这里插入图片描述
编译,启动,java -jar ***.jar
启动后页面
在这里插入图片描述
针对5.0.5版本的具体消息无法查看(消息查看有延迟)
在这里插入图片描述

SrpingBoot集成RocketMq5.0

  1. pom引用
<!-- rocketmq client-->
	<dependency>
		<groupId>org.apache.rocketmq</groupId>
		<artifactId>rocketmq-client-java</artifactId>
		<version>5.0.5</version>
	</dependency>
<!-- rocketmq end-->
  1. application.yml配置
    proxy: conf->rmq-proxy.json remotingListenPort
    accessKey: con->plain_acl.yml ->accessKey(最下面的账户)
    secretKey: con->plain_acl.yml ->secretKey(最下面的账户)
rocketmq:
  enabled: true
  accessKey: rocketmq2
  secretKey: 12345678
  proxy: 192.168.25.1:28080
  topic: lo-topic
  consumer:
    group: consumer-group
  1. 消费者RocketMqConsumer (抄别人的)

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.apis.ClientConfiguration;
import org.apache.rocketmq.client.apis.ClientConfigurationBuilder;
import org.apache.rocketmq.client.apis.ClientException;
import org.apache.rocketmq.client.apis.ClientServiceProvider;
import org.apache.rocketmq.client.apis.consumer.ConsumeResult;
import org.apache.rocketmq.client.apis.consumer.FilterExpression;
import org.apache.rocketmq.client.apis.consumer.FilterExpressionType;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

import java.nio.charset.StandardCharsets;
import java.util.Collections;

@Slf4j
@Component
public class RocketMqConsumer {

    @Value("${rocketmq.proxy}")
    private String proxy;
    @Value("${rocketmq.consumer.group}")
    private String consumerGroup;
    @Value("${rocketmq.topic}")
    private String topic;

    @Bean(name = "MqConsumer")
    @ConditionalOnProperty(value = "rocketmq.enabled", havingValue = "true") //启用禁用
    public void MqConsumer() {
        ClientServiceProvider provider = ClientServiceProvider.loadService();
        ClientConfigurationBuilder builder = ClientConfiguration.newBuilder().setEndpoints(proxy);
        ClientConfiguration configuration = builder.build();
        // 初始化Producer时需要设置通信配置以及预绑定的Topic。
        try {
            log.info("构建mq5.0消费者:proxy:{}, topic:{}, group:{}", proxy, topic, consumerGroup);
            // 订阅消息的过滤规则,表示订阅所有Tag的消息。
            String tag = "*";
            FilterExpression filterExpression = new FilterExpression(tag, FilterExpressionType.TAG);
            provider.newPushConsumerBuilder()
                    .setClientConfiguration(configuration)
                    // 设置消费者分组。
                    .setConsumerGroup(consumerGroup)
                    // 设置预绑定的订阅关系。
                    .setSubscriptionExpressions(Collections.singletonMap(topic, filterExpression))
                    // 设置消费监听器。
                    .setMessageListener(messageView -> {
                        log.info("消费消息:{}", messageView); 
                        String str = StandardCharsets.UTF_8.decode(messageView.getBody()).toString();
                        System.out.println("消费:"+str);
                        return ConsumeResult.SUCCESS;
                    }).build();
            log.info("构建mq5.0消费者成功:proxy:{}, topic:{}, group:{}", proxy, topic, consumerGroup);
        } catch (ClientException e) {
            log.error("构建mq5.0消费者异常:proxy:{}, topic:{}, group:{}", proxy, topic, consumerGroup, e);
        }
    }
}
  1. RocketMqProducer (官网抄的)

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.apis.*;
import org.apache.rocketmq.client.apis.message.Message;
import org.apache.rocketmq.client.apis.producer.Producer;
import org.apache.rocketmq.client.apis.producer.SendReceipt;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


@Slf4j
@Component
public class RocketMqProducer {

    @Value("${rocketmq.accessKey}")
    private String accessKey;
    @Value("${rocketmq.secretKey}")
    private String secretKey;
    @Value("${rocketmq.proxy}")
    private String endpoints;

	//异步
    public void asyncSendMessage(String topic, String messageStr) throws ClientException, InterruptedException, IOException {
        ClientServiceProvider provider = ClientServiceProvider.loadService();
        SessionCredentialsProvider sessionCredentialsProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);
        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder().setEndpoints(endpoints).setCredentialProvider(sessionCredentialsProvider).build();
        Producer producer = provider.newProducerBuilder().setClientConfiguration(clientConfiguration).setTopics(new String[]{topic}).build();
        String tag = "*";
        Message message = provider.newMessageBuilder().setTopic(topic).setTag(tag).setBody(messageStr.getBytes(StandardCharsets.UTF_8)).build();
        CompletableFuture<SendReceipt> future = producer.sendAsync(message);
        ExecutorService sendCallbackExecutor = Executors.newCachedThreadPool();
        future.whenCompleteAsync((sendReceipt, throwable) -> {
            if (null != throwable) {
                log.error("Failed to send message", throwable);
            } else {
                log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
            }
        }, sendCallbackExecutor);
        Thread.sleep(Long.MAX_VALUE);
        producer.close();
    }

	//同步
    public void sendMessage(String topic, String messageStr) throws ClientException, IOException {
        ClientServiceProvider provider = ClientServiceProvider.loadService();
        SessionCredentialsProvider sessionCredentialsProvider = new StaticSessionCredentialsProvider(accessKey, secretKey);
        ClientConfiguration clientConfiguration = ClientConfiguration.newBuilder().setEndpoints(endpoints).setCredentialProvider(sessionCredentialsProvider).build();
        Producer producer = provider.newProducerBuilder().setClientConfiguration(clientConfiguration).setTopics(new String[]{topic}).build();
        String tag = "*";
        System.out.println("消息内容"+messageStr);
        Message message = provider.newMessageBuilder().setTopic(topic).setTag(tag).setBody(messageStr.getBytes(StandardCharsets.UTF_8)).build();
        try {
            SendReceipt sendReceipt = producer.send(message);
            log.info("Send message successfully, messageId={}", sendReceipt.getMessageId());
        } catch (Throwable var13) {
            log.error("Failed to send message", var13);
        }
        producer.close();
    }
}

  1. RocketMqController

import org.apache.rocketmq.client.apis.ClientException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.io.IOException;

@RestController
public class RocketMqController {

    @Value("${rocketmq.topic}")
    private String topic;

    @Autowired
    private RocketMqProducer rocketMqProducer;

    @GetMapping("/rq/send/{message}")
    public String sendMessage(@PathVariable String message) throws ClientException, IOException {
        rocketMqProducer.sendMessage(topic, message);
        System.out.println("测试");
        return "success:message->"+message;
    }

}

  1. 结果
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    有问题底部留言
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
SpringBoot集成gRPC是一种常见的微服务架构方式。在集成gRPC之前,你需要进行一些准备工作,包括创建Java Maven工程、准备server端和client端的代码、编写proto文件以及配置相应的pom文件。 在集成gRPC时,你可以按照以下步骤进行操作: 1. 创建一个Java Maven工程,这将作为你的项目基础。 2. 在工程中引入所需的依赖,包括gRPCSpringBoot相关的依赖。 3. 编写server端的代码,包括启动类和相应的Controller。 4. 配置server端的相关信息,例如指定gRPC服务器的地址和端口等。 5. 编写client端的代码,包括启动类和相应的Controller。 6. 在client端配置所需的server信息。 7. 运行你的项目,检查是否成功集成gRPC。 通过以上步骤,你可以成功地将gRPC集成SpringBoot项目中,实现微服务架构。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [springboot 集成GRPC](https://blog.csdn.net/sunrj_niu/article/details/127402842)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringBoot集成gRPC微服务工程搭建实践的方法](https://download.csdn.net/download/weixin_38545243/12751706)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值