1、引入依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>

2、配置文件

rabbitmq:
addresses: 10.0.0.203
port: 5672
username: root
password: 123456
virtual-host: /
listener:
simple:
concurrency: 10
max-concurrency: 10
prefetch: 1
auto-startup: true
default-requeue-rejected: true
template:
retry:
enabled: true
initial-interval: 1000
max-attempts: 3
max-interval: 10000
multiplier: 1

2、注解配置

package dhht.seal.hn.gsgate.rabbitmq;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; /**
* @Author: sh
* @Description: RabbitMqConfig
* @Date: 10:33 2019/11/4
*/
@Configuration
public class RabbitMqConfig { public static final String QUEUE = "hnyz_gs_queue"; @Value("${spring.rabbitmq.addresses}")
private String host; @Value("${spring.rabbitmq.port}")
private int port; @Value("${spring.rabbitmq.username}")
private String username; @Value("${spring.rabbitmq.password}")
private String password; @Value("${spring.rabbitmq.virtual-host}")
private String virtualHost; public static final String GS_EXCHANGE ="gs_exchange"; /**
* 处理连接端口
* @return
*/
@Bean
public CachingConnectionFactory connectionFactory() {
CachingConnectionFactory connectionFactory = new CachingConnectionFactory(host,port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
connectionFactory.setVirtualHost(virtualHost);
connectionFactory.setPublisherConfirms(true);
return connectionFactory;
} @Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin admin = new RabbitAdmin(connectionFactory);
admin.setAutoStartup(true);
return admin;
} @Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate template =new RabbitTemplate(connectionFactory);
template.setUseDirectReplyToContainer(false);
template.setReplyTimeout(-1);
return template;
} @Bean
public Queue cretaeQueue(){
return new Queue(QUEUE,true);
} @Bean(name="gs_exchange")
public FanoutExchange getGsExchange() {
return new FanoutExchange("gs_exchange", true, false, null);
} @Bean
public Binding getFauoutBinding() {
return BindingBuilder.bind(cretaeQueue()).to(getGsExchange());
}
}
package dhht.seal.hn.gsgate.rabbitmq;

import com.alibaba.fastjson.JSON;
import dhht.seal.hn.gsgate.model.pojo.CropQueryVO;
import dhht.seal.hn.gsgate.service.CropQueryService;
import dhht.seal.hn.gsgate.service.impl.CropServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.ParameterizedType; /**
* @Author: sh
* @Description: MqSender
* @Date: 10:34 2019/11/4
*/
@Slf4j
@Service
public class MqSenderService { @Autowired
AmqpTemplate amqpTemplate; @Autowired
RabbitTemplate rabbitTemplate; @Resource
private CropServiceImpl cropImplService; public String sendMsgToQueue(Object message) {
try {
String msg = beanToString(message);
log.info("【发送的消息-社会信用代码】:" + msg);
Message mm = rabbitTemplate.sendAndReceive(RabbitMqConfig.QUEUE, new Message(msg.getBytes("UTF-8"),new MessageProperties()));
String msgResult = new String(mm.getBody());
log.info("【同步消息返回结果-msgResult】:"+msgResult);
CropQueryVO cropQueryVO = cropImplService.cropQueryVO(msg);
log.info("【消息发送后-sql查询结果-CropQueryVO】:"+JSON.toJSONString(cropQueryVO));
return JSON.toJSONString(cropQueryVO);
//amqpTemplate.convertAndSend(MQConfig.QUEUE, msg);
//ParameterizedTypeReference param = new ParameterizedTypeReference<Object>(){};
//return amqpTemplate.convertSendAndReceiveAsType(RabbitMqConfig.QUEUE, beanToString(message),param).toString();
//return amqpTemplate.convertSendAndReceive(RabbitMqConfig.QUEUE, message).toString();
} catch (UnsupportedEncodingException e) {
log.info(e.getMessage());
return null;
} } public void sendMsg(Object message) {
String msg = beanToString(message);
log.info("send message:" + msg);
amqpTemplate.convertAndSend(RabbitMqConfig.QUEUE, msg);
log.info("sendMsg()---消息发送成功!"); } public static <T> String beanToString(T value) {
if (value == null) {
return null;
}
Class<?> clazz = value.getClass();
if (clazz == int.class || clazz == Integer.class) {
return "" + value;
} else if (clazz == String.class) {
return (String) value;
} else if (clazz == long.class || clazz == Long.class) {
return "" + value;
} else {
return JSON.toJSONString(value);
}
} }
package dhht.seal.hn.gsgate.rabbitmq;

import dhht.seal.hn.gsgate.service.CropQueryService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.messaging.handler.annotation.SendTo;
import org.springframework.stereotype.Service; import javax.annotation.Resource;
import java.io.UnsupportedEncodingException; /**
* @Author: sh
* @Description: MqReceiver
* @Date: 10:40 2019/11/4
*/
@Service
public class MqReceiverService { private static Logger log = LoggerFactory.getLogger(MqReceiverService.class); @Resource
private CropQueryService cropQueryService; @RabbitListener(queues = RabbitMqConfig.QUEUE)
@SendTo(RabbitMqConfig.QUEUE)
public String receiveQueueMsg(/*String message*/Message message) {
try {
log.info("接收到队列消息:" + new String(message.getBody()));
// 业务处理代码,工商拉取入库
String resJson = cropQueryService.crropQuery(new String(message.getBody(),"UTF-8"));
return resJson;
} catch (UnsupportedEncodingException e) {
log.error(e.getMessage());
return null;
}
}
}


springboot rabbitmq消息同步用作接口调用的更多相关文章

  1. SpringBoot 动态代理实现三方接口调用

    目录 一.定义注解 二.建立动态代理类 三.注入spring容器 四.编写拦截器 五.创建客户端调用类 六.main方法测试 七.启动项目 在某些业务场景中,我们只需要业务代码中定义相应的接口或者相应 ...

  2. Springboot+Dubbo使用Zipkin进行接口调用链路追踪

    Zipkin介绍: Zipkin是一个分布式链路跟踪系统,可以采集时序数据来协助定位延迟等相关问题.数据可以存储在cassandra,MySQL,ES,mem中.分布式链路跟踪是个老话题,国内也有类似 ...

  3. SpringBoot之RESTFul风格的接口调用(jQuery-Ajax)

    一.Get $.ajax({ type: "get", url: "url地址", async: true, dataType:"json" ...

  4. springboot + rabbitmq 用了消息确认机制,感觉掉坑里了

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近部门号召大伙多组织一些技术分享会,说是要活跃公司的技术氛围,但早就看穿一切的我知道,这 T M 就是为了刷KPI ...

  5. 刚体验完RabbitMQ?一文带你SpringBoot+RabbitMQ方式收发消息

    人生终将是场单人旅途,孤独之前是迷茫,孤独过后是成长. 楔子 这篇是消息队列RabbitMQ的第二弹. 上一篇的结尾我也预告了本篇的内容:利用RabbitTemplate和注解进行收发消息,还有一个我 ...

  6. SpringBoot+RabbitMQ 方式收发消息

    本篇会和SpringBoot做整合,采用自动配置的方式进行开发,我们只需要声明RabbitMQ地址就可以了,关于各种创建连接关闭连接的事都由Spring帮我们了~ 交给Spring帮我们管理连接可以让 ...

  7. (转)RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  8. 消息同步调用-- ESFramework 4.0 进阶(07)

    分布式系统的构建一般有两种模式,一是基于消息(如Tcp,http等),一是基于方法调用(如RPC.WebService.Remoting).深入想一想,它们其实是一回事.如果你了解过.NET的Prox ...

  9. RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

            在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇 ...

随机推荐

  1. PowerShell的一些资料整理

    年后准备把一些公司的一些祖传脚本给重新弄下,之前的脚本是bat写的,又臭又长,这次就不准备补窟窿了.打算用powershell重写下,这里就整理了一些相关的技术资料. 入门教程: 入门教程可以首选国内 ...

  2. Docker退出容器不关闭容器的方法

    进入docker容器后如果退出容器,容器就会变成Exited的状态,那么如何退出容器让容器不关闭呢? 如果要正常退出不关闭容器,请按Ctrl+P+Q进行退出容器,这一点很重要,请牢记! 以下示例为退出 ...

  3. 官网英文版学习——RabbitMQ学习笔记(四)Work queues

    工作队列:把每个任务只发送给一个工作者. 上一篇我们是从一个指定的队列发送接收消息,在本文中,我们将创建一个工作队列,用于在多个工作者之间分配耗时的任务. 工作队列(即任务队列)背后的主要思想是避免立 ...

  4. 027-PHP编码和解码函数base64

    <?php $data = "我爱PHP";//解码前的值 print("我爱PHP: " . base64_encode($data)); //进行解码 ...

  5. Sklearn K均值聚类

    ## 版权所有,转帖注明出处 章节 SciKit-Learn 加载数据集 SciKit-Learn 数据集基本信息 SciKit-Learn 使用matplotlib可视化数据 SciKit-Lear ...

  6. python 导入数据包的几种方法

    1.直接导入整个数据包:improt 数据包 参考代码: # -*- coding:utf-8 -*- # 导入random数据包 import random # 引用random数据包中的randi ...

  7. UVA - 11491 Erasing and Winning(奖品的价值)(贪心)

    题意:有一个n位整数(不以0开头),要求删除其中的d个数字,使结果尽量大.(1<=d<n<=10^5) 分析: 1.从头扫一遍,如果当前填的数字小于n-d,则将当前数字填上. 2.如 ...

  8. javascript设计模式(1)——面向对象基础

    用对象收编变量2种方式 1 函数式 var Object = { name:function(){ return this; }, email:function(){ return this; } } ...

  9. BZOJ:1927: [Sdoi2010]星际竞速

    题解:最小费用流+二分图模型: 左边表示出这个点,右边表示入这个点: #include<iostream> #include<cstdio> #include<cstri ...

  10. rdlc报表带参数打印

    1.新建rdlc文件报表 2.选中rdlc文件=>视图=>报表资料 添加几个参数,如图 设计报表页面 int WaitNum = this.queueDTOs.Where(m=>m. ...