源无极

导航

 

 

1、消息总线Bus介绍和使用场景
简介:讲解消息总线Bus介绍和使用场景

 

        上一节课,有一个问题,如果我们改了仓库的配置,但是服务并没有感知到除非我们启动项目,

如何不用启动项目动态感知到git仓配置发生改变了,并动态更新到服务中。
1、什么是消息
一个事件,需要广播或者单独传递给某个接口

2、为什么使用这个
配置更新了,但是其他系统不知道是否更新

 

 

2、消息队列和RabbitMQ基础介绍
简介:消息队列和RabbitMQ基础介绍

1、消息队列介绍
优秀文章参考:https://www.cnblogs.com/linjiqin/p/5720865.html

2、同类产品
ActiveMQ
RocketMQ
Kafka


3、SpringCloud默认推荐使用RabbitMQ


4、RabbitMQ介绍
官方文档:http://www.rabbitmq.com/getstarted.html
中文文档:http://rabbitmq.mr-ping.com/

 

3、实战系列使用Docker搭建RabbitMQ3.7
简介:使用Docker安装RabbitMQ

1、如果对Docker没基础,课程后续有讲解Docker,可以先跳转过去学习Docker
2、安装步骤
1)拉取镜像:docker pull rabbitmq:management
2)查看当前镜像列表:docker images
3)删除指定镜像:docker rmi IMAGE_ID (如果需要强制删除加 -f)

4)创建容器

docker run -d --name="lanpo" -p 5671:5671 -p 15672:15672 rabbitmq:management

 

参数讲解:
run: 创建一个新的容器并运行一个命令
-d: 后台运行容器,并返回容器ID
-p: 端口映射,格式为:主机(宿主)端口:容器端口
--name="rabbitmq": 为容器指定一个名称


3、RabbitMQ默认创建了一个 guest 用户,密码也是 guest, 如果访问不了记得查看防火墙,端口或者云服务器的安全组
管理后台:http://127.0.0.1:15672

 

菜单说明

 


Overview——概览信息
Connections——连接
Channels——通道
Exchanges——交换
Queues——队列
Admin——管理

概览信息

Totals——统计
Node——节点
Ports and contexts——端口

 


rabbitMQ
占用三个端口

amqp——协议端口,5672
dustering——集群端口,25672
rabbitMQ management——管理端口,15672

Java程序,访问端口5672
通过amqp协议,与rabbit进行通信


其他安装方式:
Linux安装:https://blog.csdn.net/qq_34021712/article/details/72567786
windows安装:http://www.rabbitmq.com/install-windows.html

https://blog.csdn.net/liyuejin/article/details/78410586

 

4、高级篇幅消息总线整合配置中心架构流程图
简介:讲解消息总线Bus结合config组件搭建配置中心项目架构图和操作流程

启动
rabbitmq: docker run -d -p 5672:5672 -p 15672:15672 rabbitmq:management
rabbitmq默认是5672,所以改为5672端口

1、config-client加入依赖

<!--配置中心结合消息队列-->在product-service服务配置

1 <dependency>
2 <groupId>org.springframework.boot</groupId>
3 <artifactId>spring-boot-starter-actuator</artifactId>
4 </dependency>
5 
6 <dependency>
7 <groupId>org.springframework.cloud</groupId>
8 <artifactId>spring-cloud-starter-bus-amqp</artifactId>
9 </dependency>

 


官方文档:http://cloud.spring.io/spring-cloud-bus/single/spring-cloud-bus.html#_bus_refresh_endpoint
文档里面 暴露端点 management.endpoints.web.exposure.include=bus-refresh

2、在product-service配置文件中增加关于RabbitMQ的连接(如果是本机,则可以直接启动,采用默认连接配置)

spring:
  rabbitmq:
    host: localhost
      port: 5672
      username: guest
      password: guest

 



#暴露全部的监控信息

1 management:
2   endpoints:
3     web:
4       exposure:
5         include: "*"

 

 

修改一下controller文件

 1 package com.po.product_service.controller;
 2 
 3 import com.po.product_service.domain.Product;
 4 import com.po.product_service.service.ProductService;
 5 import org.springframework.beans.BeanUtils;
 6 import org.springframework.beans.factory.annotation.Autowired;
 7 import org.springframework.beans.factory.annotation.Value;
 8 import org.springframework.web.bind.annotation.RequestMapping;
 9 import org.springframework.web.bind.annotation.RequestParam;
10 import org.springframework.web.bind.annotation.RestController;
11 
12 import java.util.List;
13 import java.util.concurrent.TimeUnit;
14 
15 @RestController
@RefreshScope
16 @RequestMapping("/api/vi/product") 17 public class ProductController { 18 @Autowired 19 private ProductService productService; 20 @Value("${server.port}") 21 private String port; 22 /* 23 获取所有商品列表 24 */ 25 26 @Value("${env}") 27 private String env; 28 @RequestMapping("list") 29 public List<Product> findProduct(){ 30 return productService.listProduct(); 31 } 32 /* 33 通过id查出商品 34 */ 35 @RequestMapping("findById") 36 public Product findById(@RequestParam("id") int id){ 37 /* try {//10s 38 TimeUnit.SECONDS.sleep(2); 39 } catch (Exception e) { 40 e.printStackTrace(); 41 }*/ 42 Product product = productService.findProduct(id); 43 Product reslut = new Product(); 44 //将product复制到result中 45 BeanUtils.copyProperties(product,reslut); 46 reslut.setName(reslut.getName()+"data from port = "+port+" env= "+env); 47 return reslut; 48 } 49 50 }

 

env是重之前在码云上的配置

启动服务

 读取到的env就是码云的配置

我们修改一下再访问

发现并没变化

 

3、需要在product-service 的ProductController刷新配置的地方,增加注解 

@RefreshScope

4、访问验证 post方式:
http://localhost:8773/actuator/bus-refresh

1)将端口改一下再访问

 

 访问还是没有变化

再起一个节点看看

 

 

启动时会发现port确是8774

 

5、动态刷新配置: 在开发和测试环境使用,尽量少在生产环境使用

 

5、微服务相关项目改造配置中心
简介:把课程项目改造成配置中心讲解

1、git里面新增对应项目的配置文件,都要添加下面的配置

#服务的名称
spring:
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest

#暴露全部的监控信息
management:
endpoints:
web:
exposure:
include: "*"

 



2、order-service项目里面添加maven依赖

<!--配置中心客户端-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>

<!--config server-->

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

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

 


3、order-service修改application.properties为bootstrap.yml 并拷贝配置文件

#指定注册中心地址                                                                                                                                                         
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/

#服务的名称
spring:
application:
name: order-service
#指定从哪个配置中心读取
cloud:
config:
discovery:
service-id: CONFIG-SERVER
enabled: true
profile: test

 

4、各个项目启动顺序
1)注册中心
2)配置中心
3)对应的服务:商品服务、订单服务。。。
4)启动网关

 

posted on 2019-01-31 22:36  源无极  阅读(125)  评论(0编辑  收藏  举报