当前位置: 首页 > news >正文

spring-cloud-kubernetes-feign实战

关于spring-cloud-kubernetes

spring-cloud-kubernetes是springcloud官方推出的开源项目,用于将Spring Cloud和Spring Boot应用运行在kubernetes环境,并且提供了通用的接口来调用kubernetes服务,主要提供了应用程序使用k8s本身功能:服务注册发现、客户端负载均衡、从Kubernetes ConfigMap和Secrets加载应用程序属性 。 ConfigMap或Secret更改时,重新加载应用程序属性。GitHub上官方地址是:https://github.com/spring-cloud/spring-cloud-kubernetes

官网文档地址:https://cloud.spring.io/spring-cloud-kubernetes/1.1.x/reference/html/

入门程序

环境和版本:
linux系统
k8s集群
kubectl
idea
jdk8
maven

spring-boot工程
pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xxx.bolingcavalry</groupId>
    <artifactId>springcloudk8sdiscovery</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springcloudk8sdiscovery</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.1.1.RELEASE</spring-boot.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <type>pom</type>
                <scope>import</scope>
                <version>${spring-boot.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-kubernetes-core</artifactId>
            <version>1.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-kubernetes-discovery</artifactId>
            <version>1.0.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.1.1.RELEASE</version>
        </dependency>

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

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.1.1.RELEASE</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95

配置文件

spring.application.name=springcloudk8sdiscovery

    1

启动类

package com.xxx.cloud.k8s.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class Springcloudk8sdiscoveryApplication {

    public static void main(String[] args) {
        SpringApplication.run(Springcloudk8sdiscoveryApplication.class, args);
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

接口

package com.xxx.cloud.k8s.demo.controller;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @date: 2020/4/21 9:02
 * @author: lhl
 * @version: V0.1
 * */
@RestController
public class DiscoveryController {

    @Autowired
    private DiscoveryClient discoveryClient;

    /**
     * 探针检查响应类
     * @return
     */
    @RequestMapping("/health")
    public String health() {
        return "health";
    }

    /**
     * 返回远程调用的结果
     * @return
     */
    @RequestMapping("/getservicedetail")
    public String getservicedetail(
            @RequestParam(value = "servicename", defaultValue = "") String servicename) {
        return "Service [" + servicename + "]'s instance list : " + JSON.toJSONString(discoveryClient.getInstances(servicename));
    }

    /**
     * 返回发现的所有服务
     * @return
     */
    @RequestMapping("/services")
    public String services() {
        return this.discoveryClient.getServices().toString()
                + ", "
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53

服务部署
打包spring-boot工程

mvn clean -DskipTests=true package

    1

在targe\目录下生成可执行jar :springcloudk8sdiscovery-0.0.1-SNAPSHOT.jar

上传到linux服务器

创建Dockerfile文件

#基础镜像,如果本地仓库没有,会从远程仓库拉取
 FROM 私服/jdk8版本
#容器中创建目录
RUN mkdir -p /usr/local/cloudk8s-demo
#编译后的jar包copy到容器中创建到目录内
COPY springcloudk8sdiscovery-0.0.1-SNAPSHOT.jar /usr/local/cloudk8s-demo/app.jar
#指定容器启动时要执行的命令
ENTRYPOINT ["java","-jar","/usr/local/cloudk8s-demo/app.jar"]

    1
    2
    3
    4
    5
    6
    7
    8

创建 kubernetes.yml文件

apiVersion: v1
kind: Service
metadata:
  labels:
    app: springcloudk8sdiscovery
  name: springcloudk8sdiscovery
  namespace: default
spec:
  ports:
  - name: http
    port: 8080
    protocol: TCP
    targetPort: 8080
  selector:
    app: springcloudk8sdiscovery
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: springcloudk8sdiscovery
  name: springcloudk8sdiscovery
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springcloudk8sdiscovery
  template:
    metadata:
      labels:
        app: springcloudk8sdiscovery
    spec:
      containers:
      - image: 私服/test/cloudk8s-demo
        imagePullPolicy: IfNotPresent
        name: springcloudk8sdiscovery
        ports:
        - containerPort: 8080
          name: http
          protocol: TCP
        securityContext:
          privileged: false

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43

创建 start.sh 脚本文件

#!/bin/bash
imageVersion=2
docker build -t 私服/test/cloudk8s-demo:${imageVersion} . docker push私服/test/cloudk8s-demo:${imageVersion} kubectl delete -f kubernetes.yml kubectl create -f kubernetes.yml
docker image 版本修改相应需要修改 kubernetes.yml 中的镜像版本

    1
    2
    3
    4

修改start.sh为可执行 chmod +x start.sh

执行脚本 sh start.sh

查看服务是否启动

kubectl get pods

    1

READY下面的前后数一样则启动成功 1/1,且STATUS为Running状态,如果为0/1则启动失败,启动失败,通过命令:kubectl describe pod podName查看服务详情或者kubectl logs -f podName 查看日志

通过 kubectl get svc 查看服务端口,通过ip:端口访问服务查询服务列表
入门程序部署完成
通过feign调用k8s启动的服务的工程

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.xxx</groupId>
    <artifactId>cloud-k8s-feign</artifactId>
    <version>1.0-SNAPSHOT</version>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.9.RELEASE</version>
        <relativePath/>
    </parent>
    <properties>
        <springcloud.kubernetes.version>1.0.1.RELEASE</springcloud.kubernetes.version>
        <springcloud.version>2.0.3.RELEASE</springcloud.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-kubernetes-core</artifactId>
            <version>${springcloud.kubernetes.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-kubernetes-discovery</artifactId>
            <version>${springcloud.kubernetes.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-kubernetes-ribbon</artifactId>
            <version>${springcloud.kubernetes.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-commons</artifactId>
            <version>${springcloud.version}</version>
        </dependency>

        <dependency>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            <groupId>org.springframework.cloud</groupId>
        </dependency>
        <dependency>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <groupId>org.springframework.cloud</groupId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.SR3</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88

配置文件

spring:
  application:
    name: k8s-feign

product-infra-service:
  ribbon:
    KubernetesNamespace: default

backend:
  ribbon:
    eureka:
      enabled: false
    client:
      enabled: true
    ServerListRefreshInterval: 5000

hystrix:
  command:
    BackendCall:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000
  threadpool:
    BackendCallThread:
      coreSize: 5
feign:
  hystrix:
    enabled: true
server:
  port: 11101

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31

启动类

package com.xxx.cloud.k8s.feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * @date: 2020/4/21 16:02
 * @author: lhl
 * @version: V0.1
 * */
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class K8sFeignApplication {


    public static void main(String[] args) {
        SpringApplication.run(K8sFeignApplication.class, args);
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

接口

package com.xxx.cloud.k8s.feign.controller;

import com.xxx.cloud.k8s.feign.feign.TestClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @date: 2020/4/21 16:05
 * @author: lhl
 * @version: V0.1
 *
 */
@RestController
public class TestController {

    @Autowired
    private TestClient testClient;

    @GetMapping("test1")
    public String test1() {
        return testClient.services();
    }

}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25

feign 接口

package com.xxx.cloud.k8s.feign.feign;

import com.xxx.cloud.k8s.feign.hystrix.TestClientFallback;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @date: 2020/4/21 16:02
 * @author: lhl
 * @version: V0.1
 *
 */
@FeignClient(name = "${springcloudk8sdiscovery:springcloudk8sdiscovery}", fallback = TestClientFallback.class)
public interface TestClient {

    @RequestMapping("/services")
    String services();
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18

hystrix fallback类


package com.xxx.cloud.k8s.feign.hystrix;

import com.xxx.cloud.k8s.feign.feign.TestClient;
import org.springframework.stereotype.Component;

/**
 * @date: 2020/4/21 16:03
 * @author: lhl
 * @version: V0.1
 *
 */
@Component
public class TestClientFallback implements TestClient {
    @Override
    public String services() {
        return "hystrix call back";
    }
}

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19

其他步骤和入门程序差不多

start.sh文件
start.sh

#!/bin/bash

imageVersion=2

docker build -t 私服/test/cloud-k8s-feign:${imageVersion} .
docker push 私服/test/cloud-k8s-feign:${imageVersion}
 kubectl delete -f kubernetes.yml
 kubectl create -f kubernetes.yml

    1
    2
    3
    4
    5
    6
    7
    8

Dockerfile

#基础镜像,如果本地仓库没有,会从远程仓库拉取
FROM 私服/oraclejdk8
#容器中创建目录
RUN mkdir -p /usr/local/cloudk8s-feign-demo
#编译后的jar包copy到容器中创建到目录内
COPY cloud-k8s-feign-1.0-SNAPSHOT.jar /usr/local/cloudk8s-feign-demo/app.jar
#指定容器启动时要执行的命令
ENTRYPOINT ["java","-jar","/usr/local/cloudk8s-feign-demo/app.jar"]

    1
    2
    3
    4
    5
    6
    7
    8

修改start.sh文件的docker镜像版本需要也需要改kubernetes.yml的docker镜像版本
kubernetes.yml


apiVersion: v1
kind: Service
metadata:
  labels:
    app: k8s-feign
  name: k8s-feign
  namespace: default
spec:
  ports:
  - name: http
    port: 11101
    protocol: TCP
    targetPort: 11101
  selector:
    app: k8s-feign
  type: NodePort
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  labels:
    app: k8s-feign
  name: k8s-feign
spec:
  replicas: 3
  selector:
    matchLabels:
      app: k8s-feign
  template:
    metadata:
      labels:
        app: k8s-feign
    spec:
      containers:
      - image: 私服/test/cloud-k8s-feign:1
        imagePullPolicy: IfNotPresent
        name: k8s-feign
        ports:
        - containerPort: 11101
          name: http
          protocol: TCP
        securityContext:
          privileged: false

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44

运行脚本文件start.sh
产看服务是否运行
查看端口号
通过接口 test1访问服务
Ip:port/test1
可以通过接口test1,以feign调用的方式访问到入门程序的services接口
k8s安全设计

生产环境k8s服务发现会报错:

Message: Forbidden!Configured service account doesn't have access. Service account may have been revoked. services is forbidden: User "system:serviceaccount:default:default" cannot list resource "services" in API group "" in the namespace "default"

    1

通过官方发布,为权限问题

在生产级别环境,可能需要给用户角色授权

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: YOUR-NAME-SPACE
  name: namespace-reader
rules:
  - apiGroups: ["", "extensions", "apps"]
    resources: ["configmaps", "pods", "services", "endpoints", "secrets"]
    verbs: ["get", "list", "watch"]

---

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader-binding
  namespace: YOUR-NAME-SPACE
subjects:
- kind: ServiceAccount
  name: default
  apiGroup: ""
roleRef:
  kind: Role
  name: namespace-reader
  apiGroup: ""

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.exyb.cn/news/show-35181.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

【Unity】如何将资源包里的Prefabs资源为己所用

步骤一、将所需要的prefab从外部导入的资源拖入Scene中。二、右键该预制体&#xff0c;选择Unpack Prefab Completely取消该预制体及其子物体与资源包中预制体的关联。三、将该预制体拖动到自己的prefabs文件夹目录下&#xff0c;制作成自己项目的预制体。四、在Project面板下&…...

防火墙高可靠性

双机热备、BFD双向转发检测、IP-LINK链路检测、Link-Group逻辑组、ETH-Trunk链路捆绑、Bypass&#xff0c;跨数据中心集群&#xff0c;双主控、业务板备份、数据中心会话同步 双机热备 目的&#xff1a;为了防止单点故障 实现&#xff1a;两台硬件软件相同的FW之间通过一条独…...

手写Promise.all()方法

有1个promise报错了&#xff0c;其他的promis会执行吗&#xff1f; 会的&#xff0c;因为Promsie在实例化时候就已经执行完了。手写Promise.all()方法 function PromiseAll(promiseArray){//返回的一定是个proimsereturn new Promise((resolve,reject)>{//首先判断传入的是…...

Centos8.0系统升级到最新版本

一 &#xff0c;Centos8.0更换国内源&#xff08;阿里源&#xff09; 1&#xff0c; 备份旧的配置文件 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup2&#xff0c;进入cd /etc/yum.repos.d cd /etc/yum.repos.d3&#xff0c;下载新的 Ce…...

高端音响的死亡被大大夸大了

几年前&#xff0c;在 MP3 盗版时代的鼎盛时期——当高端音频世界哀叹 MP3 文件的糟糕音质&#xff0c;而 MP3 用户乐于用音质换取免费音乐时——一位业内同事问我我以为高端音频已经死了。我向她保证不&#xff0c;一部分音乐迷&#xff0c;虽然可能不是主流&#xff0c;但总是…...

Java学习笔记--13.网络编程

Java学习笔记–13 第十章 网络编程 目录Java学习笔记--13前言网络编程1.定义2.TCP通信(1).ServerSocket(2).Socket3.UDP通信(1).发送方(2).接收方前言 21世纪&#xff0c;走进了信息时代&#xff0c;各种各样的软件层出不穷&#xff0c;但是总离不开程序开发&#xff0c;离不…...

python100例045求1-100之和用sum(range(1,101))

""" 题目045&#xff1a;统计 1 到 100 之和 """ def test045():count 0for i in range(1, 101):count iprint(count)# 二print(sum(range(1, 101))) test045()...

wimform 继承窗体卡顿解决

get { const int CS_NOCLOSE 0x200; CreateParams cp base.CreateParams; cp.ClassStyle cp.ClassStyle | CS_NOCLOSE; if (!DesignMode) { cp.ExStyle...

git 替换commit的账户与邮箱信息 GitLab: Committer‘s email does not follow the pattern

最终解决方法来源&#xff1a; https://segmentfault.com/q/1010000006999861 https://www.cnblogs.com/zh7791/p/12986083.html ① git rebase -i HEAD~N N代表前N次的提交记录 ② 出现记录后键入i进入INSERT模式&#xff0c;在需要修改的条目上&#xff0c;将pick改为edit…...

后端返回状态码401, 获取不到怎么办?

传送门...

解决for循环中异步请求顺序不一致的问题

解决for循环中异步请求顺序不一致的问题参考文章&#xff1a; &#xff08;1&#xff09;解决for循环中异步请求顺序不一致的问题 &#xff08;2&#xff09;https://www.cnblogs.com/mo3408/p/12163012.html 备忘一下。...

可以ping通网关,dns。但是死活不能上网????怎么回事?

苹果电脑重装了一把win7系统。连接手机热点没问题&#xff0c;连接店里wifi也没问题。但是呢连接家里wifi死活不能上网&#xff01;&#xff01;&#xff01; 各种网上搜索啊&#xff0c;花了三四个小时&#xff0c;找到了各种解决方法&#xff0c;比如什么winsock reset还有什…...

python3中 下载wechatpy后 没有 work模块

1、 环境 win10 2、python3.6 3、wechatpy 最新版本 4、python3 中安装 wechatpy 模块后找不到 work模块 5、错误如下&#xff1a; ModuleNotFoundError: No module named wechatpy.work 这个错误明显是找不到wechatpy.work这个模块 6、查看wechatpy 使用文档 &#x…...

机器学习----支撑向量机(SVM)

SVM 支持向量机&#xff08;Support Vector Machine, SVM&#xff09; 图中是一个样本空间&#xff0c;里面有一些样本点&#xff0c;分成红色和蓝色两类。 逻辑回归是要找到一根决策边界&#xff0c;由决策边界把数据分成两类。但可能存在这样一些数据&#xff08;下图&…...

Spring都没弄明白凭什么拿高薪?真香系列

正文 二叉树 由 n&#xff08; n > 0&#xff09;个有限节点组成一个具有层次关系的集合&#xff0c;看起来就像一个倒挂的树&#xff0c;因此称这样的数据结构为树。 一个节点的子节点个数叫做度&#xff0c;通俗的讲就是树叉的个数。树中最大的度叫做树的度&#xff0c…...

一天一道ctf 第36天

[NPUCTF2020]ReadlezPHP 点进源码发现/time.php?source&#xff0c;访问一下得到 <?php #error_reporting(0); class HelloPhp {public $a;public $b;public function __construct(){$this->a "Y-m-d h:i:s";$this->b "date";}public functi…...

从空间角度研究类,类与类之间的关系

class A:address 西安def __init__(self,name):self.name namedef func(self):if self.name dsb:self.skins jlfdef func1(self):print(self.__dict__)A.aaa ysh# obj A(dsb) # 类外面可以给对象封装属性 # respons input(sbs) # if respons s: # obj.wepon AWM #…...

dockerfile的详细介绍

Dockerfile 关键字作用备注FROM指定父镜像指定dockerfile基于那个image构建MAINTAINER作者信息用来标明这个dockerfile谁写的LABEL标签用来标明dockerfile的标签 可以使用Label代替Maintainer 最终都是在docker image基本信息中可以查看RUN执行命令执行一段命令 默认是/bin/sh…...

nacos心跳

轮询 概括来说是服务端定时主动的去与要监控状态的客户端&#xff08;或者叫其他系统&#xff09;通信&#xff0c;询问当前的某种状态&#xff0c;客户端返回状态信息&#xff0c;客户端没有返回或返回错误、失效信息、则认为客户端已经宕机&#xff0c;然后服务端自己内部把这…...

408数据结构I 数据结构的基本概念

数据结构的基本概念 数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合&#xff0c;数据是计算机程序加工的原料。 数据元素 是数据的基本单位&#xff0c;通常作为一个整体进行考虑和处理。 数…...

Nacos心跳时间配置及服务快速上下线

Nacos心跳时间配置及服务快速上下线 Nacos默认心跳时间是30秒&#xff0c;不太满足正式环境需要&#xff0c;需要调整心跳时间更短&#xff0c;让线上服务上下线能快速感知. 1.修改微服务的nacos的心跳配置时间 preserved.heart.beat.interval: 1000 #该实例在客户端上报心跳…...

Python编程进阶 关于变量引用这点事

文章目录一、变量的引用1、 引用的概念2、变量引用的示例3、函数的参数和返回值的传递二、可变和不可变类型1、分类2、不可变类型3、可变类型4、哈希 hash三、局部变量和全局变量1、 局部变量&#xff08;1&#xff09;局部变量的作用&#xff08;2&#xff09;局部变量的生命周…...

Python已编辑好的文件问什么文件?

Python已经编译好的文件为后缀 .py文件...

04_set容器_查找和统计

#include<iostream> #include<string> #include<set> using namespace std;//查找 void test01() {set<int>s1;s1.insert(10);s1.insert(30);s1.insert(20);s1.insert(40);set<int>:: iterator pos s1.find(30);if (pos ! s1.end()){cout <&…...

js常见问题总结-DOM节点增删改查

DOM节点的增删改查 文章目录DOM节点的增删改查1.查找节点2.增加节点2.1 创建节点createElement()&#xff1a;创建一个dom节点2.2 父节点插入子节点2.3 同级插入节点3.修改节点3.1 替换节点3.2 clone节点4.删除节点4.1删除节点5.常见操作实现问题综合案例1.查找节点 getElemen…...

高瓴张磊:从学渣到投资大佬,也曾多次犯错

当年差点考不上初中的他&#xff0c;如今管理着超过5000亿元的资金。 来 源 | 财经新知&#xff08;ID&#xff1a;caijingxinzhi&#xff09; 作 者 | 端木清树 编 辑 | 伊页 1972年&#xff0c;河南省驻马店市的一对夫妻诞下一个男孩&#xff0c;并给他取了一个在当年绝对烂…...

UDP和TCP的特点和区别

1、UDP 和 TCP 的特点与区别 用户数据报协议 UDP&#xff08;User Datagram Protocol&#xff09; 是无连接的&#xff0c;尽最大可能交付&#xff0c;没有拥塞控制&#xff0c;面向报文&#xff08;对于应用程序传下来的报文不合并也不拆分&#xff0c;只是添加 UDP 首部&…...

Centos7启动Eclipse Ditto项目

Centos7启动Eclipse Ditto项目1.安装Oracle VM VirtualBox虚拟机&#xff0c;并安装centos7详细安装记录2.安装Docker3.Eclipse Ditto1.安装Oracle VM VirtualBox虚拟机&#xff0c;并安装centos7详细安装记录 详见win10安装oracle vm virtualbox&#xff0c;并安装centos7详细…...

webui自动化测试框架(2)——对基本操作进行封装common

接上篇&#xff1a;webui自动化测试框架&#xff08;1&#xff09;——框架介绍 封装driver.py: driver的初始化&#xff0c;查找元素&#xff0c;点击元素&#xff0c;输入内容&#xff0c;切换iframe&#xff0c;切换Windows等 1.类&#xff0c;构造函数init里面适配浏览器…...

vue——父子组件的数据传递

父子组件的数据传递 1、 父>子&#xff08;通过属性的形式&#xff09;&#xff1a; &#xff08;1&#xff09;在子组件的标签里设置属性【如 :count“0” 】。给属性前面加上冒号&#xff0c;参数‘0’会变成数字格式&#xff08;变为一个js表达式&#xff09;&#xff…...

dbc2000 注册机|dbc2000 注册码注册机下载

点击下载来源&#xff1a;dbc2000 注册机 dbc2000 注册机是同名源程序软件的注册机软件&#xff0c;该源程序软件是一款应用于数据库搭建以及数据写入的数据库架设工具&#xff0c;它拥有强大的数据写入功能&#xff0c;在作为应用程序使用时&#xff0c;它不仅可以充当数据属性…...

秋招面经第八弹:网易二面-数据开发工程师

秋招第八弹&#xff1a;网易二面-数据开发工程师 写在最前&#xff1a;秋招以来一直在冲&#xff0c;因为事情比较多&#xff0c;对于笔试面试一直没有复盘&#xff0c;现在靠仅存的记忆把面试的一些问题记录下来&#xff0c;尽可能记录出能回忆到的问题&#xff0c;但可能记的…...

安卓课程格子APP

https://download.csdn.net/download/weixin_57836618/73810452 功能演示&#xff1a; 查看所有课程 点击主页面空白处即可添加课程 添加课程之后查看课程 查看双周课程 查看单周课程 6.查看课程详情...

强化学习——格子世界

强化学习——格子世界 项目源码地址&#xff1a;https://gitee.com/infiniteStars/machine-learning-experiment 1. 实验内容 2. 实验代码 import numpy as np import matplotlib.pyplot as plt from matplotlib.table import Table from xml.dom.minidom import Document #手…...

华为机试 - 跳格子游戏

目录 题目描述 输入描述 输出描述 用例 题目解析 算法源码 题目描述 地上共有N个格子&#xff0c;你需要跳完地上所有的格子&#xff0c;但是格子间是有强依赖关系的&#xff0c;跳完前一个格子后&#xff0c;后续的格子才会被开启&#xff0c;格子间的依赖关系由多组st…...

php 爬课程表信息,Ruby爬取教务系统生成课程表

我为什么要虐自己最近觉得课程格子广告越来越多&#xff0c;乱七八糟的东西越来越多&#xff0c;完全失去了一开始的存在价值&#xff0c;并且没有电脑端app&#xff0c;想查看课程必须拿出手机&#xff0c;而我使用电脑频率要比手机高&#xff0c;所以才有了折腾的动力。于是我…...

android 课程表 ui,UICollectionViewLayout实现课程表布局

因为项目中有课程表的相关模块&#xff0c;第一时间想到用UICollectionView。然而后期的需求越来越复杂&#xff0c;每个格子需要展示的内容越来越多&#xff0c;所以不得不寻找合适的解决方案。最后发现自定义UICollectionViewLayout可以实现我的需求。先放效果图&#xff1a;…...

Android自定义View课程表,Android 自定义View课程表表格

自己闲下来时间写的一个课表控件使用的自定义LinearLayout 里面View都是用代码实现的 最终效果如下图 写的可能有问题希望多多指点创建一个自定义LinearLayout 控件用来装载课程的信息和课程的周数 和节数大概的布局三这样的根据上面的看来觉得总体布局我分了两个 上面的星期是…...

java课程设计设计_java课程设计

1. 团队课程设计博客链接https://www.cnblogs.com/choco1ate/p/12172223.html2.本组课题及本人任务本组课题&#xff1a;泡泡堂(炸弹人)游戏本人任务&#xff1a;Box类(游戏地图中的每个方格)Bomb类(游戏过程中的)游戏玩家输赢信息的文件储存3.需求分析Box类&#xff1a;该类为…...

《课程格子》的一个笔试题目

题目如下&#xff0c;感觉很适合喜欢琢磨的程序员&#xff0c;也是考验你编码风格的时候。 Lets make a tower defense game&#xff08;塔防游戏):1. You have 1 tower, with H health and D dps(damage per second).2. There are n attackers, each with h_i health and d_i …...

Android仿照超级课程表 or 课程格子 一键提取课表功能(方正系统)

参考文章http://blog.csdn.net/sbsujjbcy ,本文仿照‘ 安卓弟 提供的android 项目实战——打造超级课程表一键提取课表功能文章&#xff0c;对他的代码进行了修改和补充&#xff0c;为什么要修改呢&#xff1f;原因是安卓弟的那个源码版本过于老旧&#xff0c;很多方法已经过…...

入门必看,51单片机学习三步走

回想起我初学单片机到现在已经有六年了。学习期间使用了51单片机、XX卡尔单片机、STM16、STM32等单片机。每次接触新的单片机我首先会熟悉它的基本开发&#xff0c;然后再通过项目的实现去深入的了解它。 大家都知道51单片机是最容易学习的&#xff0c;不仅因为它的编程简单&a…...

【Proteus仿真】51单片机汇编数显大型交通灯控制

【Proteus仿真】51单片机汇编数显大型交通灯控制Proteus仿真 学汇编的人虽然 不多&#xff0c;但是还是有的&#xff0c;分享一个汇编的案例&#xff0c;给需要的人予以参考学习&#xff0c;有些时候我们还是需要懂一些汇编指令比较好。 汇编代码&#xff08;.asm&#xff09;…...

51单片机的交通灯设计

设计功能 &#xff08;1&#xff09;采用四方向数码管显示时间的设计&#xff0c;符合实际的交通信号灯设计。 &#xff08;2&#xff09;7个按键&#xff0c;分别为&#xff1a;复位、夜间模式、紧急模式、设定时间、时间加、时间减、调试确定键&#xff1b; &#xff08;3&a…...

交通信号灯识别的自主式学习系统

自动驾驶中一个核心模块的设计。其中算法层面涉及到对交通信号灯的检测与识别&#xff0c;前期对该模块进行了简单算法的设计&#xff0c;主体的识别框架如下图&#xff0c;主要思想是基于滑动窗思想和机器学习模型。当然为了进一步提升算法的效率&#xff0c;采用了基于信号灯…...

Verilog语言交通灯课程设计

一、 设计思路 1&#xff09;设计一个十字路口交通灯控制器。交通灯处于东西大街和南北大街&#xff0c;如图2-1所示用寄存器模拟十字路口交通信号控制情况。当东西方向为绿灯时&#xff0c;南北方向为红灯&#xff0c;二南北方向为绿灯时&#xff0c;东西方向为红灯。东西向通…...

阿波罗——交通信号灯感知

交通信号灯感知 本文档详细的介绍了Apollo2.0中交通信号感知模块的工作原理。 简介 交通信号灯感知模块通过使用摄像头提供精确全面的路面交通信号灯状态。 通常情况下&#xff0c;交通信号灯有3种状态&#xff1a; 红黄绿 然而当信号灯不能正常工作时&#xff0c;它可能是…...

交通信号管理服务器,矿下交通信号控制系统

井下运输是矿山生产的一个关键环节&#xff0c;随着国家对矿井安全的日益重视和监管力度的不断加强&#xff0c;大中型采矿企业井下运输安全生产监控系统开始研制和装备。中文名矿下交通信号控制系统外文名Mine Ramp Traffic Monitor & Auto Control System性 质控制系统…...

微机原理课程设计-模拟十字路口交通信号灯

一、设计任务描述 1.1设计目的 通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识&#xff0c;提高应用微机解决问题的能力&#xff0c;加深对微机应用的理解。通过查阅资料&#xff0c;结合所学知识进行软、硬件的设计&#xff0c;使学生初步掌握应用微机解决问题…...

利用深度学习进行交通灯识别_通过深度学习识别交通信号灯

利用深度学习进行交通灯识别by David Brailovsky戴维布雷洛夫斯基(David Brailovsky) 通过深度学习识别交通信号灯 (Recognizing Traffic Lights With Deep Learning) 我如何在10周内学习深度学习并赢得5,000美元 (How I learned deep learning in 10 weeks and won $5,000) I…...