1. activemq

  首先引入依赖

  pom.xml文件

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

  创建一个配置队列类

  JMSConfiguration.java

package com.wangx.boot.util;

import org.apache.activemq.command.ActiveMQQueue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jms.annotation.EnableJms; import javax.jms.Destination; @Configuration
@EnableJms
public class JMSConfiguration { @Bean
public Destination createDestination () {
return new ActiveMQQueue("com.wangx");
}
}

  创建一个消息生产者和消息消费者

  

package com.wangx.boot.mq;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component; import javax.jms.Destination;
@Component
public class JMSComponent { @Autowired
private JmsMessagingTemplate jmsMessagingTemplate; @Autowired
private Destination destination; public void send (String message) {
jmsMessagingTemplate.convertAndSend(destination, message);
} @JmsListener(destination = "com.wangx")
public void listener (String message) {
System.out.println("接收到的消息:" + message);
}
}

  @JmsListener中的destination必须与队列配置类中定一的queue的名字相同。

   SpringBoot提供了一个默认内置的消息队列中间件,如果我们使用spring.activemq.in-memory=true时将会使用内置的消息队列,但是它也提供了我们使用外部activemq的一些配置:

  

#spring.activemq.broker-url=
#spring.activemq.password=
#spring.activemq.user=
#spring.activemq.packages.trust-all=false
#spring.activemq.packages.trusted=
#spring.activemq.pool.configuration.*=
#spring.activemq.pool.enabled=false
#spring.activemq.pool.expiry-timeout=0
#spring.activemq.pool.idle-timeout=30000
#spring.activemq.pool.max-connections=1

  测试消息发送

  

package com.wangx.boot.controller;

import com.wangx.boot.mq.JMSComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping("/mq")
public class JMSController { @Autowired
private JMSComponent jmsComponent; @RequestMapping("/send")
@ResponseBody
public String send(String msg) {
jmsComponent.send(msg);
return msg;
}
}

  当访问localhost:8080/mq/send?msg=xxx时,消费者的监听方法(带有@JmsListener注解的方法)会自动监听到消息,并打印到控制台上。

2. rabbitmq的使用

  首先引入pom.xml 

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

ps:rabbitmq和activemq的依赖不能同时存在。

  首先还是创建一个队列配置类

  AMQConfiguration.java

package com.wangx.boot.util;

import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; @Configuration
public class AMQConfiguration { @Bean
public Queue queue() {
return new Queue("hello", true);
} }

  接着创建消息生产和消费组件

package com.wangx.boot.mq;

import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; @Component
public class AMQComponent { @Autowired
private AmqpTemplate amqpTemplate; public void send(String message) {
amqpTemplate.convertAndSend("hello", message);
} @RabbitListener(queues = "hello")
public void receiveQueue(String text) {
System.out.println("接受到:" + text);
}
}

  在SpringBoot的启动类上添加@EnableRabbit表示开启rabbit消息队列。

  测试是否发送了消息

  

package com.wangx.boot.controller;

import com.wangx.boot.mq.AMQComponent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; @Controller
@RequestMapping("/amq")
public class AMQController { @Autowired
private AMQComponent amqComponent; @RequestMapping("/send")
@ResponseBody
public String send(String msg) {
amqComponent.send(msg);
return msg;
}
}

  访问localhost:8080/amq/send?msg=xxx,在调用放松消息的方法时。监听的方法同样会收到消息,并打印到控制台上。

3. 调用rest服务

  3.1 代码实现

    首先引入依赖

    pom文件

<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>

  然后随便写一个Controller接口,如:

package com.wangx.boot.controller;

import com.wangx.boot.cache.CachingBook;
import com.wangx.boot.entity.Book;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; @RestController
@RequestMapping("/api")
public class ApiController { @Autowired
private CachingBook cachingBook; @RequestMapping(value = "/select", method = RequestMethod.GET)
public Book get(@RequestParam(defaultValue = "遮天") String name) {
Book book = cachingBook.findById(name);
return book;
} @RequestMapping(value = "/update", method = RequestMethod.GET)
public Book update(@RequestParam(defaultValue = "遮天") String name) {
Book bean = cachingBook.findById(name);
bean.setAuthor("耳根");
cachingBook.updateById(bean);
return bean;
} @RequestMapping(value = "/del", method = RequestMethod.GET)
public String del(@RequestParam(defaultValue = "遮天") String name) {
return cachingBook.deleteById(name);
}
}

  启动服务,在另一个工程中使用RestTemplateBuilder来访问我们启动的服务,

@Autowired
private RestTemplateBuilder restTemplateBuilder; /**
* get请求
*/
@Test
public void getForObject() {
//发送get请求
String res = restTemplateBuilder.build().getForObject("http://localhost:8080/api/select",String.class, "遮天");
System.out.println(res);
Map<String,Object> map = new HashMap<String,Object>();
map.put("name", "遮天");
//发送post请求
res = restTemplateBuilder.build().postForObject("http://localhost:8080/api/update", map, String.class);
System.out.println(res);
}

  可以成功调用我们启动的服务的接口。

  3.2 使用代理

    使用RestTemplate还可以自己实现代理的功能。

  

public class ProxyCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
//http://ip.zdaye.com/ 上可以查询可用的主机和端口
String proxyHost = "59.33.46.187";
int proxyPort = 6969; HttpHost proxy = new HttpHost(proxyHost, proxyPort);
HttpClient httpClient = HttpClientBuilder.create().setRoutePlanner(new DefaultProxyRoutePlanner(proxy) {
@Override
public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException { return super.determineProxy(target, request, context);
}
}).build();
HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
httpComponentsClientHttpRequestFactory.setConnectTimeout(10000);
httpComponentsClientHttpRequestFactory.setReadTimeout(60000);
restTemplate.setRequestFactory(httpComponentsClientHttpRequestFactory);
}
}

  测试方式:

String result = restTemplateBuilder.additionalCustomizers(new ProxyCustomizer()).build().getForObject("http://www.baidu.com", String.class);
System.out.println(result);

SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用的更多相关文章

  1. SpringBoot学习笔记(11)-----SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用

    1. activemq 首先引入依赖 pom.xml文件 <dependency> <groupId>org.springframework.boot</groupId& ...

  2. SpringBoot集成ActiveMq消息队列实现即时和延迟处理

    原文链接:https://blog.csdn.net/My_harbor/article/details/81328727 一.安装ActiveMq 具体安装步骤:自己谷歌去 二.新建springbo ...

  3. ActiveMQ 消息队列服务

      1 ActiveMQ简介 1.1 ActiveMQ是什么 ActiveMQ是一个消息队列应用服务器(推送服务器).支持JMS规范. 1.1.1 JMS概述 全称:Java Message Serv ...

  4. JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明

    1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的 ...

  5. rabbitmq学习(二):rabbitmq(消息队列)的作用以及rabbitmq之直连交换机

    前言 上篇介绍了AMQP的基本概念,组成及其与rabbitmq的关系.了解了这些东西后,下面我们开始学习rabbitmq(消息队列)的作用以及用java代码和rabbitmq通讯进行消息发布和接收.因 ...

  6. C#调用RabbitMQ实现消息队列

    前言 我在刚接触使用中间件的时候,发现,中间件的使用并不是最难的,反而是中间件的下载,安装,配置才是最难的. 所以,这篇文章我们从头开始学习RabbitMq,真正的从头开始. 关于消息队列 其实消息队 ...

  7. ActiveMQ消息队列从入门到实践(4)—使用Spring JMS收发消息

    Java消息服务(Java Message Service ,JMS)是一个Java标准,定义了使用消息代理的通用API .在JMS出现之前,每个消息代理都有私有的API,这就使得不同代理之间的消息代 ...

  8. C#实现ActiveMQ消息队列

    本文使用C#实现ActiveMQ消息队列功能. 一.首先需要导入两个包,分别是:Apache.NMS 和 Apache.NMS.ActiveMQ 二.创建Winform程序实现生产者功能. 三.Pro ...

  9. ActiveMQ基础教程(四):.net core集成使用ActiveMQ消息队列

    接上一篇:ActiveMQ基础教程(三):C#连接使用ActiveMQ消息队列 这里继续说下.net core集成使用ActiveMQ.因为代码比较多,所以放到gitee上:https://gitee ...

随机推荐

  1. 实验吧--web--你真的会php吗

    ---恢复内容开始--- 实验吧的一道题php审计题.拉下来写一写. http://ctf5.shiyanbar.com/web/PHP/index.php 打开之后说have fun 那就抓包来看看 ...

  2. TensorFlow笔记-图片读取

    回到上一篇文件的读取分这么几步: # 构造队列 # 1,构造图片文件的队列 file_queue = tf.train.string_input_producer(filelist) # 构造阅读器 ...

  3. leetcode 198. House Robber (Easy)

    https://leetcode.com/problems/house-robber/ 题意: 一维数组,相加不相邻的数组,返回最大的结果. 思路: 一开始思路就是DP,用一维数组保存dp[i]保存如 ...

  4. 《VR入门系列教程》之5---应用方向

    VR应用方向     面向消费者的虚拟现实才发展了几年,就出现了大量应用程序,虚拟现实抓住了人们对未来的渴望.开发者甚至想要把整个现实世界都做成虚拟现实,这些都是可以理解的.     但是,现在仍然没 ...

  5. Java面向对象16种原则

    一   类的设计原则   1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (L ...

  6. 1.Java概述、安装及环境搭建

    1. 前言 1.1 学习方法 1. 学会学习的方法 2. 学会独立解决问题 3. 主动的学习而不是被动的接受 4. 知识的大家的,能力才是自己的 1.2 推荐博客 当代程序员都应该养成写博客.看博客的 ...

  7. sklearn 第二篇:数据预处理

    sklearn.preprocessing包提供了几个常用的转换函数,用于把原始特征向量转换为更适合估计器的表示. 转化器(Transformer)用于对数据的处理,例如标准化.降维以及特征选择等,提 ...

  8. tomcat 启动是 jdbc警告

    the web application [ROOT] registered the JDBC driver [com.mysql.jdbc.Driver] but failed to unregist ...

  9. QTableView表格控件区域选择-自绘选择区域

    目录 一.开心一刻 二.概述 三.效果展示 四.实现思路 1.绘制区域 2.绘制边框 3.绘制 五.相关文章 原文链接:QTableView表格控件区域选择-自绘选择区域 一.开心一刻 陪完客户回到家 ...

  10. [Hei.Captcha] Asp.Net Core 跨平台验证码实现

    写在前面 说起来比较丢脸.我们有个手机的验证码发送逻辑需要使用验证码,这块本来项目里面就有验证码绘制逻辑,.Net Framework的,使用的包是System.Drawing,我把这验证码绘制逻辑复 ...