项目代码构造
这里写图片描述
关注点在红框的代码。。。
代码
下面就把项目的代码展示下来
application.properties
配置文件
spring.application.name=rabbitmq-hello
# RabbitMQ
spring.rabbitmq.first.host=node9
spring.rabbitmq.first.port=5670
spring.rabbitmq.first.username=guest
spring.rabbitmq.first.password=guest
spring.rabbitmq.second.host=localhost
spring.rabbitmq.second.port=5672
spring.rabbitmq.second.username=guest
spring.rabbitmq.second.password=guest
# MySQL
spring.datasource.url = jdbc:mysql://localhost:3306/cloudtest
spring.datasource.username = root
spring.datasource.password = root
spring.datasource.driverClassName = com.mysql.jdbc.Driver
HelloApplication.java
程序入口
package com.paas.springboot.demo01;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HelloApplication {
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
RabbitConfig.java
RabbitMQ配置类
package com.paas.springboot.demo01;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
@Configuration
public class RabbitConfig {
@Bean(name="firstConnectionFactory")
@Primary
public ConnectionFactory firstConnectionFactory(
@Value("${spring.rabbitmq.first.host}") String host,
@Value("${spring.rabbitmq.first.port}") int port,
@Value("${spring.rabbitmq.first.username}") String username,
@Value("${spring.rabbitmq.first.password}") String password
){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
return connectionFactory;
}
@Bean(name="secondConnectionFactory")
public ConnectionFactory secondConnectionFactory(
@Value("${spring.rabbitmq.second.host}") String host,
@Value("${spring.rabbitmq.second.port}") int port,
@Value("${spring.rabbitmq.second.username}") String username,
@Value("${spring.rabbitmq.second.password}") String password
){
CachingConnectionFactory connectionFactory = new CachingConnectionFactory();
connectionFactory.setHost(host);
connectionFactory.setPort(port);
connectionFactory.setUsername(username);
connectionFactory.setPassword(password);
return connectionFactory;
}
@Bean(name="firstRabbitTemplate")
@Primary
public RabbitTemplate firstRabbitTemplate(
@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
){
RabbitTemplate firstRabbitTemplate = new RabbitTemplate(connectionFactory);
return firstRabbitTemplate;
}
@Bean(name="secondRabbitTemplate")
public RabbitTemplate secondRabbitTemplate(
@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
){
RabbitTemplate secondRabbitTemplate = new RabbitTemplate(connectionFactory);
return secondRabbitTemplate;
}
@Bean(name="firstFactory")
public SimpleRabbitListenerContainerFactory firstFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("firstConnectionFactory") ConnectionFactory connectionFactory
) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
@Bean(name="secondFactory")
public SimpleRabbitListenerContainerFactory secondFactory(
SimpleRabbitListenerContainerFactoryConfigurer configurer,
@Qualifier("secondConnectionFactory") ConnectionFactory connectionFactory
) {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
configurer.configure(factory, connectionFactory);
return factory;
}
@Bean
public Queue firstQueue() {
System.out.println("configuration firstQueue ........................");
return new Queue("hello1");
}
@Bean
public Object secondQueue() {
System.out.println("configuration secondQueue ........................");
return new Queue("hello2");
}
}
Receiver.java
RabbitMQ中的消费者,接收first RabbitMQ中的队列hello1的数据
package com.paas.springboot.demo01;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "hello1", containerFactory="firstFactory")
public class Receiver {
@RabbitHandler
public void process(String hello) {
System.out.println("Receiver : " + hello);
}
}
Receiver2.java
RabbitMQ中的消费者,接收second RabbitMQ中的队列hello2的数据
package com.paas.springboot.demo01;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@Component
@RabbitListener(queues = "hello2", containerFactory="secondFactory" )
public class Receiver2 {
@RabbitHandler
public void process(String hello) {
System.out.println("Receiver : " + hello);
}
}
Sender.java
RabbitMQ中的生产者,发送消息到first RabbitMQ中的队列hello1和hello2
package com.paas.springboot.demo01;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
@Component
public class Sender {
@Resource(name="firstRabbitTemplate")
private RabbitTemplate firstRabbitTemplate;
public void send1() {
String context = "hello1 " + new Date();
System.out.println("Sender : " + context);
this.firstRabbitTemplate.convertAndSend("hello1", context);
}
public void send2() {
String context = "hello2 " + new Date();
System.out.println("Sender : " + context);
this.firstRabbitTemplate.convertAndSend("hello2", context);
}
}
1
Sender2.java
RabbitMQ中的生产者,发送消息到second RabbitMQ中的队列hello1和hello2
package com.paas.springboot.demo01;
import java.util.Date;
import javax.annotation.Resource;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Component;
@Component
public class Sender {
@Resource(name="firstRabbitTemplate")
private RabbitTemplate firstRabbitTemplate;
public void send1() {
String context = "hello1 " + new Date();
System.out.println("Sender : " + context);
this.firstRabbitTemplate.convertAndSend("hello1", context);
}
public void send2() {
String context = "hello2 " + new Date();
System.out.println("Sender : " + context);
this.firstRabbitTemplate.convertAndSend("hello2", context);
}
}
TestDemo01.java
测试类,调用Sender发送消息
package com.paas.springboot.demo01;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.SpringApplicationConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = HelloApplication.class)
public class TestDemo01 {
@Autowired
private Sender sender;
@Autowired
private Sender2 sender2;
@Test
public void hello() throws Exception {
sender.send1();
sender.send2();
}
@Test
public void hello2() throws Exception {
sender2.send1();
sender2.send2();
}
}
1
pom.xml
http://lib.csdn.net/article/java/65386 原文出处
项目代码构造 这里写图片描述 关注点在红框的代码。。。 代码 下面就把项目的代码展示下来 application.properties 配置文件 spring.application.name=rabbitmq-hello # RabbitMQ spring.rabbitmq.first.host=node9 spring.rabbitmq.first.port=5670 s...
web management: http://120.27.114.229:15672
你会使用
Spring
AMQP的RabbitTemplate内置应用系统来发布
消息
和使用一个MessageListenerAdapter POJO来订阅
消息
git克隆
gradle
boot
Run
大约几十分钟
一款文本编辑器或者IDE
你也可以从这个项目中入门代码或者可以在入门 (个人非常喜欢的一件ecl
ip
se的IDE)中查看
RabbitMQ
服务器
像许多的
Spring
项目,你可以从头开始并完成每一步,或者你可以绕过你已经熟悉的一些步骤,无论是哪种步骤,你最终可以完成代码
从头开始的话,请去看内置
如果要绕过你熟悉的,按照以下合并:
并解压得到
源
代码或者从
spring
boot
实践学习案例,与其它组件结合如 mybatis、jpa、dubbo、redis、mongodb、memcached、kafka、
rabbitmq
、activemq、elasticsearch、security、shiro等
####
Spring
Boot
版本
- 2.0.3.RELEASE
#### 模块说明
-
spring
boot
-basic
-
Spring
Boot
基础知识,包括
Spring
Boot
起步、
配置
详解、aop、filter、拦截器、监听、启动器、全局异常处理、外部Tomcat启动、HTTPS、监控 等。
-
spring
boot
-data
-
Spring
Boot
数据库操作,包括
Spring
JDBC、JPA、Mybatis注解版 & XML版、MongoDB。其中,每个版本都有其对应的多数据
源
解决方案。
-
spring
boot
-caches
-
Spring
Boot
缓存,包括redis、ehcache、
spring
-cache、memcached、使用redis实现session共享 等。
-
spring
boot
-templates
-
Spring
Boot
模板,包括thymeleaf、freemarker、jsp、表单校验 等。
-
spring
boot
-docs
-
Spring
Boot
文档生成工具,包括 Swagger、
Spring
RestDocs
-
spring
boot
-bussiness
-
Spring
Boot
业务应用,包括 定时任务、上传文件、
发送
邮件、Doc文档操作 等。
-
spring
boot
-ajax
-
Spring
Boot
AJAX 跨域,包括 JSONP、Node.js与
Spring
Boot
集成使用反向代理 等。
-
spring
boot
-websockets
-
Spring
Boot
使用 Websocket
-
spring
boot
-webflux
-
Spring
Boot
集成 WebFlux 开发反应式 Web 应用
-
spring
boot
-dubbo
-
Spring
Boot
集成 Dubbo 的三种方式
-
spring
boot
-search
-
Spring
Boot
集成 搜索引擎,包括 elasticsearch、solr
-
spring
boot
-mq
-
Spring
Boot
集成
消息
队列,包括 kafka、
rabbitmq
、activemq、rocketmq、redismq
-
spring
boot
-auth
-
Spring
Boot
权限认证,包括 Apache Shiro、
Spring
Security
-
spring
boot
-cloud
-
Spring
Cloud 入门,包括 Eureka(服务注册与发现)、Config(
配置
中心)、Hystrix(断路器)、Bus(
消息
总线) 等
- chapter1:[基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API](http://blog.didispace.com/
spring
-
boot
-learning-1/)
- [使用Intellij中的
Spring
Initializr来快速构建
Spring
Boot
/Cloud工程](http://blog.didispace.com/
spring
-initializr-in-intellij/)
### 工程
配置
- chapter2-1-1:[
配置
文件详解:自定义属性、随机数、多环境
配置
等](http://blog.didispace.com/
spring
boot
properties/)
### Web开发
- chapter3-1-1:[构建一个较为复杂的RESTful API以及单元测试](http://blog.didispace.com/
spring
boot
restfulapi/)
- chapter3-1-2:[使用Thymeleaf模板引擎渲染web视图](http://blog.didispace.com/
spring
boot
web/)
- chapter3-1-3:[使用Freemarker模板引擎渲染web视图](http://blog.didispace.com/
spring
boot
web/)
- chapter3-1-4:[使用Velocity模板引擎渲染web视图](http://blog.didispace.com/
spring
boot
web/)
- chapter3-1-5:[使用Swagger2构建RESTful API](http://blog.didispace.com/
spring
boot
swagger2/)
- chapter3-1-6:[统一异常处理](http://blog.didispace.com/
spring
boot
exception/)
### 数据访问
- chapter3-2-1:[使用JdbcTemplate](http://blog.didispace.com/
spring
boot
data1/)
- chapter3-2-2:[使用
Spring
-data-jpa简化数据访问层(推荐)](http://blog.didispace.com/
spring
boot
data2/)
- chapter3-2-3:[多数据
源
配置
(一):JdbcTemplate](http://blog.didispace.com/
spring
boot
multidatasource/)
- chapter3-2-4:[多数据
源
配置
(二):
Spring
-data-jpa](http://blog.didispace.com/
spring
boot
multidatasource/)
- chapter3-2-5:[使用NoSQL数据库(一):Redis](http://blog.didispace.com/
spring
boot
redis/)
- chapter3-2-6:[使用NoSQL数据库(二):MongoDB](http://blog.didispace.com/
spring
boot
mongodb/)
- chapter3-2-7:[整合MyBatis](http://blog.didispace.com/
spring
boot
mybatis/)
- chapter3-2-8:[MyBatis注解
配置
详解](http://blog.didispace.com/mybatisinfo/)
### 事务管理
- chapter3-3-1:[使用事务管理](http://blog.didispace.com/
spring
boot
transactional/)
- chapter3-3-2:[分布式事务(未完成)]
### 其他内容
- chapter4-1-1:[使用@Scheduled创建定时任务](http://blog.didispace.com/
spring
boot
scheduled/)
- chapter4-1-2:[使用@Async实现异步调用](http://blog.didispace.com/
spring
boot
async/)
#### 日志管理
- chapter4-2-1:[默认日志的
配置
](http://blog.didispace.com/
spring
boot
log/)
- chapter4-2-2:[使用log4j记录日志](http://blog.didispace.com/
spring
boot
log4j/)
- chapter4-2-3:[对log4j进行多环境
不同
日志级别的控制](http://blog
spring
-
boot
-helloWorld:
spring
-
boot
的helloWorld版本
spring
-
boot
-mybaits-annotation:注解版本
spring
-
boot
-mybaits-xml:xml
配置
版本
spring
-
boot
-mybatis-mulidatasource:
spring
boot
+mybatis多数据
源
最简解决方案
spring
-
boot
-mybatis-annotation-mulidatasource:
spring
boot
+mybatis(注解版)多数据
源
最简解决方案
spring
-
boot
-thymeleaf:simple
spring
boot
thymeleaf demo
spring
-
boot
-jpa-thymeleaf-curd:
spring
boot
+ jpa + thymeleaf 增删改查示例
spring
-
boot
-
rabbitmq
:
spring
boot
和
rabbitmq
各种
消息
应用案例
spring
-
boot
-scheduler:
spring
boot
和定时任务案例
spring
-
boot
-web:web开发综合使用案例
spring
-
boot
-mail:
spring
boot
和邮件服务
spring
-
boot
-mongodb:
spring
boot
和mongodb的使用
spring
-
boot
-multi-mongodb:
spring
boot
和mongodb多数据
源
的使用
spring
-
boot
-package-war:
spring
-
boot
打包成war包示例
spring
-
boot
-shiro:
spring
boot
整合shiro rbac示例
上一遍博客介绍了使用
spring
-
boot
连接单个
rabbitmq
服务器
发送
和接收
消息
,但是在实际的项目中我们可能需要同时连接
多个
不同
的
rabbitmq
服务器
发送
和接收
消息
。今天简单介绍下如何使用
spring
-
boot
连个
多个
rabbitmq
服务器
发送
和接收
消息
。
1.
配置
文件中
配置
2个
rabbitmq
连接信息(这里我在2台虚拟机上安装
rabbitmq
)
server:
port: 8091
配置
rabbitmq
同步传输
@Bean
AsyncRabbitTemplate asyncRabbitTemplate(RabbitTemplate rabbitTemplate){
return new AsyncRabbitTemplate(rabbitTemplate);
同步请求设置
首先注入T
spring
-
boot
-helloWorld:
spring
-
boot
的helloWorld版本
spring
-
boot
-mybaits-annotation:注解版本
spring
-
boot
-mybaits-xml:xml
配置
版本
spring
-
boot
-mybatis-mulidatasource:
spring
boot
+mybatis多数据
源
最简解决方案
spring
-
boot
-mybatis-annotation-mulidatasource:
spring
boot
+mybatis(注解版)多数据
源
最简解决方案
spring
-
boot
-thymeleaf:simple
spring
boot
thymeleaf demo
spring
-
boot
-jpa-thymeleaf-curd:
spring
boot
+ jpa + thymeleaf 增删改查示例
spring
-
boot
-
rabbitmq
:
spring
boot
和
rabbitmq
各种
消息
应用案例
spring
-
boot
-scheduler:
spring
boot
和定时任务案例
spring
-
boot
-web:web开发综合使用案例
spring
-
boot
-mail:
spring
boot
和邮件服务
spring
-
boot
-mongodb:
spring
boot
和mongodb的使用
spring
-
boot
-multi-mongodb:
spring
boot
和mongodb多数据
源
的使用
spring
-
boot
-package-war:
spring
-
boot
打包成war包示例
spring
-
boot
-shiro:
spring
boot
整合shiro rbac示例
spring
-
boot
-file-upload:使用
Spring
Boot
上传文件示例
spring
-
boot
-fastDFS:
Spring
Boot
整合FastDFS示例
spring
-
boot
-actuator:
Spring
Boot
Actuator 使用示例
spring
-
boot
-admin-simple:
Spring
Boot
Admin 的使用示例
分布式任务调度管理 Distribution task center. 支持Rabbit与kafka两种
消息
队列,实现立即执行与根据CronExpress表达式的执行及更加复杂的复合执行策略。在任务执行过程中可完成回滚操作。
在微服务中我们经常会采用cron或
spring
scheduler来实现调度任务。但是在分布式多节点架构中,我们不能让每个节点都去执行同一个任务。并且在任务执行过程中一旦遇到失败,必须具备一种回滚机制来保证分布式事务调度的一致性与完整性。本项目采用了
rabbitmq
与kafka两种
消息
队列,将任务调度从原始的业务微服务中有效分离,降低业务代码的耦合度。所有调度任务均由调度中心微服务发起。使原有业务真正实现分布式多节点运行。本资
源
包含了Github下载地址。
今天在写项目的时候遇到新需求,一个mq的功能要使用我们公司的
服务器
的mq,一个mq的功能要使用部署的那边的
服务器
的mq,话不多说直接上代码。
配置
文件application.yml:
spring
:
rabbitmq
:
yjdpeservice:
host: 192.168.0.1
port: 5672
username: xxin
password: xxin
yjservice:
Spring
Boot
配置
RabbitMQ
的步骤如下:
1. 安装
RabbitMQ
服务器
,可以在官网下载安装,也可以使用 Docker 容器来运行
RabbitMQ
。
2. 在项目中添加依赖,可以在 pom.xml 中添加以下内容:
<dependency>
<groupId>org.
spring
framework.
boot
</groupId>
<artifactId>
spring
-
boot
-starter-amqp</artifactId>
</dependency>
3. 在 application.properties 或者 application.yml 文件中
配置
RabbitMQ
相关的参数,例如:
spring
.
rabbitmq
.host=127.0.0.1
spring
.
rabbitmq
.port=5672
spring
.
rabbitmq
.username=guest
spring
.
rabbitmq
.password=guest
4. 创建一个
消息
生产者类,实现向
RabbitMQ
发送
消息
。
5. 创建一个
消息
消费者类,实现从
RabbitMQ
接收
消息
。
6. 在
Spring
Boot
启动类中添加 @EnableRabbit 注解,以启用
RabbitMQ
的相关
配置
。
7. 运行项目,检查
RabbitMQ
是否能够正常收发
消息
。
以上是
Spring
Boot
配置
RabbitMQ
的大致步骤,详细内容可以参考官方文档或者相关教程。
通过maven 打docker 镜像包,出错ADD failed: stat /var/lib/docker/tmp/docker-builderXXXXXX: no such file or dir
42857