热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于dubbo的分布式项目框架搭建开发工具idea(springboot+dubbo+zookeeper+redis+rabbitmq+基于Swagger2的restfulapi)(四)

1.rabbitmq的集成首先在配置文件里增加#rabbitMQspring.rabbitmq.host127.0.0.1spring.rabbitmq.port5672sprin

1.rabbitmq的集成

首先在配置文件里增加


#rabbitMQ
spring.rabbitmq.host=127.0.0.1
spring.rabbitmq.port=5672
spring.rabbitmq.username=root
spring.rabbitmq.password=root
spring.rabbitmq.publisher-cOnfirms=true
spring.rabbitmq.publisher-returns=true
spring.rabbitmq.template.mandatory=true

1.1这里的username和password是需要接下来我们自己在rabbitmq里添加的用户和密码,也可以使用默认的用户和密码guest

1.2 安装rabbitmq之前需要先安装OTP 点击进入以下网址,自己选择合适版本下载

http://www.erlang.org/downloads

安装完后继续安装rabbitmq

http://www.rabbitmq.com/download.html

 rabbitmq 和 otp 全都默认下一步安装即可

详细的步骤请看

https://www.cnblogs.com/ericli-ericli/p/5902270.html

安装配置完成后,进入管控台界面,可以在queues里看到声明的队列的信息

配置队列等信息


import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* @author hhp
* @Title: RabbitConfiguration
* @Description: mq 队列,配置
* @return:
* @throws
*/
@Configuration
public class RabbitConfiguration {
// 声明队列
@Bean
public Queue queue1() {
return new Queue("hello.queue1", true);
}
@Bean
public Queue queue2() {
return new Queue("hello.queue2", true);
}
// 声明交互器
@Bean
TopicExchange topicExchange() {
return new TopicExchange("topicExchange");
}
// 绑定
@Bean
public Binding binding1() {
return BindingBuilder.bind(queue1()).to(topicExchange()).with("key.1");
}
@Bean
public Binding binding2() {
return BindingBuilder.bind(queue2()).to(topicExchange()).with("key.#");
}
}

配置消息的发送者


import org.apache.log4j.Logger;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.rabbit.core.RabbitTemplate.ReturnCallback;
import org.springframework.amqp.rabbit.support.CorrelationData;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.UUID;
/**
* @author hhp
* @Title: Sender
* @Description: 向mq发送消息
* @param:
* @return:
* @throws
*/
@Component
public class Sender implements RabbitTemplate.ConfirmCallback, ReturnCallback {
private static Logger logger = Logger.getLogger(App.class);
@Autowired
private RabbitTemplate rabbitTemplate;
@PostConstruct
public void init() {
rabbitTemplate.setConfirmCallback(this);
rabbitTemplate.setReturnCallback(this);
}
@Override
public void confirm(CorrelationData correlationData, boolean ack, String cause) {
if (ack) {
logger.info("消息发送成功:" + correlationData);
} else {
logger.info("消息发送失败:" + cause);
}
}
@Override
public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
logger.error(message.getMessageProperties().getCorrelationIdString() + " 发送失败");
}
// 发送消息,
public void send(String msg) {
CorrelationData correlatiOnId= new CorrelationData(UUID.randomUUID().toString());
logger.info("开始发送消息 : " + msg.toLowerCase());
String respOnse= rabbitTemplate.convertSendAndReceive("topicExchange", "key.1", msg, correlationId).toString();
logger.info("结束发送消息 : " + msg.toLowerCase());
logger.info("消费者响应 : " + response + " 消息处理完成");
}
}

配置消息的接收者


/**
* @author hhp
* @Title: Receiver
* @Description: 接收消息
* @param:
* @return:
* @throws
*/
@Component
public class Receiver {

private static Logger logger = Logger.getLogger(App.class);
@RabbitListener(queues = "hello.queue1")
public String processMessage1(String msg) {
logger.info(Thread.currentThread().getName() + " 接收到来自hello.queue1队列的消息:" + msg);
return msg.toUpperCase();
}
@RabbitListener(queues = "hello.queue2")
public void processMessage2(String msg) {
logger.info(Thread.currentThread().getName() + " 接收到来自hello.queue2队列的消息:" + msg);
}
}

运行test类


import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.ysk.component.Sender;
@RunWith(value = SpringJUnit4ClassRunner.class)
@SpringBootTest(classes = App.class)
public class RabbitTest {
@Autowired
private Sender sender;
@Test
public void sendTest() throws Exception {
for (int i = 0; i <3; i++) {
sender.send("消息发送测试");
}
}
}

 



推荐阅读
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • Ceph API微服务实现RBD块设备的高效创建与安全删除
    本文旨在实现Ceph块存储中RBD块设备的高效创建与安全删除功能。开发环境为CentOS 7,使用 IntelliJ IDEA 进行开发。首先介绍了 librbd 的基本概念及其在 Ceph 中的作用,随后详细描述了项目 Gradle 配置的优化过程,确保了开发环境的稳定性和兼容性。通过这一系列步骤,我们成功实现了 RBD 块设备的快速创建与安全删除,提升了系统的整体性能和可靠性。 ... [详细]
  • 2020年9月15日,Oracle正式发布了最新的JDK 15版本。本次更新带来了许多新特性,包括隐藏类、EdDSA签名算法、模式匹配、记录类、封闭类和文本块等。 ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 基于iSCSI的SQL Server 2012群集测试(一)SQL群集安装
    一、测试需求介绍与准备公司计划服务器迁移过程计划同时上线SQLServer2012,引入SQLServer2012群集提高高可用性,需要对SQLServ ... [详细]
  • 网络爬虫的规范与限制
    本文探讨了网络爬虫引发的问题及其解决方案,重点介绍了Robots协议的作用和使用方法,旨在为网络爬虫的合理使用提供指导。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 在 CentOS 7 上部署和配置 RabbitMQ 消息队列系统时,首先需要安装 Erlang,因为 RabbitMQ 是基于 Erlang 语言开发的。具体步骤包括:安装必要的依赖项,下载 Erlang 源码包(可能需要一些时间,请耐心等待),解压源码包,解决可能出现的错误,验证安装是否成功,并将 Erlang 添加到环境变量中。接下来,下载 RabbitMQ 的 tar.xz 压缩包,并进行解压和安装。确保每一步都按顺序执行,以保证系统的稳定性和可靠性。 ... [详细]
  • SpringBoot非官方教程|终章:文章汇总springboot非官方教程,可能最接近于官方的一个教程,大多数案例都来自于官方文档,为了更好的理解,加入了个人的改造。码云下载:htt ... [详细]
  • SpringCloud之Bus(消息总线)
    说明:关于SpringCloud系列的文章中的代码都在码云上面地址:https:gitee.comzh_0209_javaspringcloud-ali ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
  • 洞见RSAC|点击获取企业安全策略“工具包”
    为用户提供安全智 ... [详细]
  • MiriamPena在可伸缩,高性能,高并发性和高可用性系统方面拥有10多年的经验。她是旧金山AdRoll的一名工程师,负责设计其实时出价 ... [详细]
author-avatar
燕阳阳消_469
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有