栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

5.2 学习总结 config配置中心,Rabbitmq六种工作模式

5.2 学习总结 config配置中心,Rabbitmq六种工作模式

1 Spring cloud config 配置中心

集中地管理和维护配置文件
微服务启动时,从服务器获取配置文件

1.1 准备 git 仓库

现在本地准备一个文件夹存放2,3,4的配置文件,再把文件夹放到 git 仓库

    在 gitee 创建仓库

    springcloud1开源

    在 springcloud1 工程目录下,新建一个文件夹:config

    把 2,3,4 的 application.yml 复制到 config 目录,并改名

    item-service-dev.ymluser-service-dev.ymlorder-service-dev.yml

    创建本地仓库

    double shift – 搜索 create git repository(有中文插件用汉字搜索)

    选择 springcloud1 工程目录,设置成本地仓库

    double shift – 搜索 commit

    勾选所有文件、填写提交信息,然后点提交按钮

    把本地仓库推送到远程仓库

    double shift – 搜索 push

    点 define remote 链接

    粘贴远程仓库的地址,完成推送

1.2 搭建配置中心

    新建 spring 模块:sp09-config

    添加依赖

    eureka clientconfig server

    yml

spring:
  application:
    name: config-server
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/shixumin/springclould1 #创建的git仓库地址
          search-paths: config
server:
  port: 6001
eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka

    启动类注解:@EnableConfigServer

    验证

    注册表中有 config-serverhttp://localhost:6001/item-service/devhttp://localhost:6001/user-service/devhttp://localhost:6001/order-service/dev

1.3 配置中心的客户端
    把 2,3,4 的 application.yml 都注释掉添加依赖: config client
        
            org.springframework.cloud
            spring-cloud-starter-config
        
    添加新的配置文件: bootstrap.yml

    eureka地址设置配置中心的服务id下载的配置文件

# 引导配置,应用启动之前会先执行引导配置
#应用启动时才会执行 application.yml

#从配置中心下载配置,再使用下载的配置启动应用
# 1.连接eureka
# 2.从注册表获得config-server的地址
# 3.从config-server下载配置文件

eureka:
  client:
    service-url:
      defaultZone: http://eureka1:2001/eureka,http://eureka2:2002/eureka
spring:
  cloud:
    config:
      discovery:
        enabled: true #
        #2.从注册表获得config-server的地址
        service-id: CONFIG-SERVER
      #3.从config-server下载配置文件 user-service-dev.yml
      name: user-service
      profile: dev
1.4 检查确认
    按顺序启动项目
      05-eureka,等待05完全启动09-config,等待09完全启动03-user
    检查配置中心
      注册表中有 config-serverhttp://localhost:6001/item-service/devhttp://localhost:6001/user-service/devhttp://localhost:6001/order-service/dev
    03-user 的控制台日志,有没有连接 6001 服务器

更换仓库再测试

注意:先启动02的话 ,会连接默认配置中心 localhost:8888

VMware 1.1 ip设置失败
# centos 7 禁用 NetworkManager 系统服务
systemctl stop NetworkManager
systemctl disable NetworkManager

# centos 8 开启 VMware 托管
nmcli n on
systemctl restart NetworkManager
1.2 安装 Docker 环境
    关闭虚拟机右键点虚拟机–管理–克隆点三下下一步,起名字: docker-base启动虚拟机执行 ifconfig 查看 ip用 MobaXterm 工具连接服务器,上传文件到 /root/

    DevOps课前资料dockerdocker-install 文件夹 按 csdn 离线安装 docker 笔记
    上传离线安装包
    rabbitmq-install 目录上传到 /root
    切换到rabbitmq-install目录
    cd rabbitmq-install
    安装
    rpm -ivh *.rpm

Rabbitmq

消息服务、消息队列、消息中间件 Broker

常见的消息服务器:

RabbitmqActivemqRocketmqKafkaTubemq 搭建 Rabbitmq 服务器 1. 关闭 docker-base,从docker-base克隆: rabbitmq 2. 设置固定ip

./ip-static
ip: 192.168.64.140

ifconfig
3. 上传文件到 /root/

DevOps课前资料dockerrabbit-image.gz 4. 导入镜像

systemctl restart docker

docker load -i rabbit-image.gz

docker images
5. 按照 rabbitmq 笔记 – docker 启动rabbitmq,启动rabbitmq 容

    关闭防火墙

    systemctl stop firewalld
    systemctl disable firewalld #取消开机自启
     
    # 重启 docker 系统服务
    systemctl restart docker
    

    配置管理员用户名和密码

    mkdir /etc/rabbitmq
    vim /etc/rabbitmq/rabbitmq.conf
    
    # 添加两行配置:
    default_user = admin
    default_pass = admin
    
    

    启动Rabbitmq

    docker run -d --name rabbit 
    -p 5672:5672 
    -p 15672:15672 
    -v /etc/rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf 
    -e RABBITMQ_CONFIG_FILE=/etc/rabbitmq/rabbitmq.conf 
    --restart=always 
    rabbitmq:management
    

    访问管理控制台 http://192.168.64.140:15672
    用户名密码是 admin

3 rabbitmq六种工作模式 3.1 简单模式

发送消息的程序是生产者队列就代表一个邮箱。虽然消息会流经RbbitMQ和你的应用程序,但消息只能被存储在队列里。队列存储空间只受服务器内存和磁盘限制,它本质上是一个大的消息缓冲区。多个生产者可以向同一个队列发送消息,多个消费者也可以从同一个队列接收消息.消费者等待从队列接收消息

pom依赖

    
        
            com.rabbitmq
            amqp-client
            5.4.3
        
    
生产者发送消息
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 1.连接服务器
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口
        f.setUsername("admin");
        f.setPassword("admin");
        Connection con = f.newConnection();
        //建立信道
        Channel c = con.createChannel(); //通信新增
        // 2.在服务器上创建一个队列 : helloworld
        //如果队列在服务器上已存在,不会重复创建
        
        c.queueDeclare("helloworld",false,false,false,null);
        // 3.向helloworld队列发送消息
        
        c.basicPublish("", "helloworld", null, "helloworld!".getBytes());

        System.out.println("消息已发送");
        c.close();
        con.close();
    }
}

消费者接收消息
import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

public class Consumer {
    public static void main(String[] args) throws IOException, TimeoutException {
        // 连接
        // 1.连接服务器
        ConnectionFactory f = new ConnectionFactory();
        f.setHost("192.168.64.140");
        f.setPort(5672);//5672 收发消息端口 , 15672 管理控制台界面的端口
        f.setUsername("admin");
        f.setPassword("admin");
        Connection con = f.newConnection();
        //建立信道
        Channel c = con.createChannel(); //通信新增
        // 2.在服务器上创建一个队列 : helloworld
        //如果队列在服务器上已存在,不会重复创建
        c.queueDeclare("helloworld",false,false,false,null);

        // 3.创建回调对象
        //DeliverCallback 处理消息
        //方式1 new 匿名内部类
        DeliverCallback deliverCallback = new DeliverCallback() {
            @Override
            public void handle(String s, Delivery message) throws IOException {
                byte[] a = message.getBody();
                 s = new String(a);
                System.out.println("收到:"+s);
            }
        };
        //方式2 Lambda表达式
//        DeliverCallback deliverCallback = (consumerTag, message) -> {
//            byte[] a = message.getBody();
//            String s = new String(a);
//            System.out.println("收到:"+s);
//        };
        CancelCallback cancelCallback=consumerTag -> {};
        
        // 4. 开始接受消息,把消息传递给一个回调对象进行处理
        //第2个参数 autoAck: 是否自动确认
        c.basicConsume("helloworld", true, deliverCallback, cancelCallback);
    }
}
3.2 工作模式

一个生产者,多个消费者,每个消费者获取到的消息唯一

    自动模式
    消费者从消息队列获取消息后,服务端就认为该消息已经成功消费。手动模式
    消费者从消息队列获取消息后,服务端并没有标记为成功消费
    消费者成功消费后需要将状态返回到服务端
4 查看有没有暴露bus-refresh

http://localhost:6001/actuator

查看2,3,4 控制台有没有重连配置中心,重新下载相应配置(商品,用户,订单配置)

POST http://localhost:6001/actuator/bus-refresh

bus 消息总线 (动态配置刷新) sleuth + Zipkin 链路跟踪

zipkin 可以收集链路跟踪数据,提供可视化的链路分析

java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
java -jar zipkin-server-2.23.16-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672

微服务添加 zipkin 起步依赖

修改以下微服务

sp02-item-service
sp03-user-service
sp04-order-service
sp11-zuul

    org.springframework.cloud
    spring-cloud-starter-zipkin

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/774535.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号