Merge branch 'spring-operator-polish-urls-remaining-master'
This commit is contained in:
4
.github/CONTRIBUTING.md
vendored
4
.github/CONTRIBUTING.md
vendored
@@ -28,7 +28,7 @@ added after the original pull request but before a merge.
|
||||
you can import formatter settings using the
|
||||
`eclipse-code-formatter.xml` file from the
|
||||
[Spring Cloud Build](https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml) project. If using IntelliJ, you can use the
|
||||
[Eclipse Code Formatter Plugin](http://plugins.jetbrains.com/plugin/6546) to import the same file.
|
||||
[Eclipse Code Formatter Plugin](https://plugins.jetbrains.com/plugin/6546) to import the same file.
|
||||
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
|
||||
`@author` tag identifying you, and preferably at least a paragraph on what the class is
|
||||
for.
|
||||
@@ -40,6 +40,6 @@ added after the original pull request but before a merge.
|
||||
* A few unit tests would help a lot as well -- someone has to do it.
|
||||
* If no-one else is using your branch, please rebase it against the current master (or
|
||||
other target branch in the main project).
|
||||
* When writing a commit message please follow [these conventions](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html),
|
||||
* When writing a commit message please follow [these conventions](https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html),
|
||||
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
|
||||
message (where XXXX is the issue number).
|
||||
|
||||
14
README.adoc
14
README.adoc
@@ -84,7 +84,7 @@ credentials and you already have those.
|
||||
|
||||
The projects that require middleware generally include a
|
||||
`docker-compose.yml`, so consider using
|
||||
http://compose.docker.io/[Docker Compose] to run the middeware servers
|
||||
https://compose.docker.io/[Docker Compose] to run the middeware servers
|
||||
in Docker containers. See the README in the
|
||||
https://github.com/spring-cloud-samples/scripts[scripts demo
|
||||
repository] for specific instructions about the common cases of mongo,
|
||||
@@ -106,13 +106,13 @@ a modified file in the correct place. Just commit it and push the change.
|
||||
|
||||
=== Working with the code
|
||||
If you don't have an IDE preference we would recommend that you use
|
||||
http://www.springsource.com/developer/sts[Spring Tools Suite] or
|
||||
http://eclipse.org[Eclipse] when working with the code. We use the
|
||||
http://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
|
||||
https://www.springsource.com/developer/sts[Spring Tools Suite] or
|
||||
https://eclipse.org[Eclipse] when working with the code. We use the
|
||||
https://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
|
||||
should also work without issue as long as they use Maven 3.3.3 or better.
|
||||
|
||||
==== Importing into eclipse with m2eclipse
|
||||
We recommend the http://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
|
||||
We recommend the https://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
|
||||
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
|
||||
marketplace".
|
||||
|
||||
@@ -169,7 +169,7 @@ added after the original pull request but before a merge.
|
||||
`eclipse-code-formatter.xml` file from the
|
||||
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
|
||||
Cloud Build] project. If using IntelliJ, you can use the
|
||||
http://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
|
||||
https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
|
||||
Plugin] to import the same file.
|
||||
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
|
||||
`@author` tag identifying you, and preferably at least a paragraph on what the class is
|
||||
@@ -182,6 +182,6 @@ added after the original pull request but before a merge.
|
||||
* A few unit tests would help a lot as well -- someone has to do it.
|
||||
* If no-one else is using your branch, please rebase it against the current master (or
|
||||
other target branch in the main project).
|
||||
* When writing a commit message please follow http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
|
||||
* When writing a commit message please follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
|
||||
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
|
||||
message (where XXXX is the issue number).
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Asciidoctor default stylesheet | MIT License | http://asciidoctor.org */
|
||||
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */
|
||||
/* Remove the comments around the @import statement below when using this as a custom stylesheet */
|
||||
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic|Noto+Serif:400,400italic,700,700italic|Droid+Sans+Mono:400";*/
|
||||
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section,summary{display:block}
|
||||
|
||||
@@ -88,7 +88,7 @@ credentials and you already have those.
|
||||
|
||||
The projects that require middleware generally include a
|
||||
`docker-compose.yml`, so consider using
|
||||
http://compose.docker.io/[Docker Compose] to run the middeware servers
|
||||
https://compose.docker.io/[Docker Compose] to run the middeware servers
|
||||
in Docker containers. See the README in the
|
||||
https://github.com/spring-cloud-samples/scripts[scripts demo
|
||||
repository] for specific instructions about the common cases of mongo,
|
||||
@@ -110,13 +110,13 @@ a modified file in the correct place. Just commit it and push the change.
|
||||
|
||||
=== Working with the code
|
||||
If you don't have an IDE preference we would recommend that you use
|
||||
http://www.springsource.com/developer/sts[Spring Tools Suite] or
|
||||
http://eclipse.org[Eclipse] when working with the code. We use the
|
||||
http://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
|
||||
https://www.springsource.com/developer/sts[Spring Tools Suite] or
|
||||
https://eclipse.org[Eclipse] when working with the code. We use the
|
||||
https://eclipse.org/m2e/[m2eclipse] eclipse plugin for maven support. Other IDEs and tools
|
||||
should also work without issue as long as they use Maven 3.3.3 or better.
|
||||
|
||||
==== Importing into eclipse with m2eclipse
|
||||
We recommend the http://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
|
||||
We recommend the https://eclipse.org/m2e/[m2eclipse] eclipse plugin when working with
|
||||
eclipse. If you don't already have m2eclipse installed it is available from the "eclipse
|
||||
marketplace".
|
||||
|
||||
@@ -175,7 +175,7 @@ added after the original pull request but before a merge.
|
||||
`eclipse-code-formatter.xml` file from the
|
||||
https://raw.githubusercontent.com/spring-cloud/spring-cloud-build/master/spring-cloud-dependencies-parent/eclipse-code-formatter.xml[Spring
|
||||
Cloud Build] project. If using IntelliJ, you can use the
|
||||
http://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
|
||||
https://plugins.jetbrains.com/plugin/6546[Eclipse Code Formatter
|
||||
Plugin] to import the same file.
|
||||
* Make sure all new `.java` files to have a simple Javadoc class comment with at least an
|
||||
`@author` tag identifying you, and preferably at least a paragraph on what the class is
|
||||
@@ -188,7 +188,7 @@ added after the original pull request but before a merge.
|
||||
* A few unit tests would help a lot as well -- someone has to do it.
|
||||
* If no-one else is using your branch, please rebase it against the current master (or
|
||||
other target branch in the main project).
|
||||
* When writing a commit message please follow http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
|
||||
* When writing a commit message please follow https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html[these conventions],
|
||||
if you are fixing an existing issue please add `Fixes gh-XXXX` at the end of the commit
|
||||
message (where XXXX is the issue number).
|
||||
|
||||
@@ -259,7 +259,7 @@ If you need to suppress some rules (e.g. line length needs to be longer), then i
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE suppressions PUBLIC
|
||||
"-//Puppy Crawl//DTD Suppressions 1.1//EN"
|
||||
"http://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
|
||||
"https://www.puppycrawl.com/dtds/suppressions_1_1.dtd">
|
||||
<suppressions>
|
||||
<suppress files=".*ConfigServerApplication\.java" checks="HideUtilityClassConstructor"/>
|
||||
<suppress files=".*ConfigClientWatch\.java" checks="LineLengthCheck"/>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
:github-tag: master
|
||||
:github-repo: spring-cloud/spring-cloud-netflix
|
||||
:github-raw: http://raw.github.com/{github-repo}/{github-tag}
|
||||
:github-code: http://github.com/{github-repo}/tree/{github-tag}
|
||||
:github-raw: https://raw.github.com/{github-repo}/{github-tag}
|
||||
:github-code: https://github.com/{github-repo}/tree/{github-tag}
|
||||
:all: {asterisk}{asterisk}
|
||||
:nofooter:
|
||||
:branch: master
|
||||
@@ -23,7 +23,7 @@ The server can be configured and deployed to be highly available, with each serv
|
||||
=== How to Include Eureka Client
|
||||
|
||||
To include the Eureka Client in your project, use the starter with a group ID of `org.springframework.cloud` and an artifact ID of `spring-cloud-starter-netflix-eureka-client`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
=== Registering with Eureka
|
||||
|
||||
@@ -76,7 +76,7 @@ To disable the Eureka Discovery Client, you can set `eureka.client.enabled` to `
|
||||
|
||||
=== Authenticating with the Eureka Server
|
||||
|
||||
HTTP basic authentication is automatically added to your eureka client if one of the `eureka.client.serviceUrl.defaultZone` URLs has credentials embedded in it (curl style, as follows: `http://user:password@localhost:8761/eureka`).
|
||||
HTTP basic authentication is automatically added to your eureka client if one of the `eureka.client.serviceUrl.defaultZone` URLs has credentials embedded in it (curl style, as follows: `https://user:password@localhost:8761/eureka`).
|
||||
For more complex needs, you can create a `@Bean` of type `DiscoveryClientOptionalArgs` and inject `ClientFilter` instances into it, all of which is applied to the calls from the client to the server.
|
||||
|
||||
NOTE: Because of a limitation in Eureka, it is not possible to support per-server basic auth credentials, so only the first set that are found is used.
|
||||
@@ -333,7 +333,7 @@ This section describes how to set up a Eureka server.
|
||||
=== How to Include Eureka Server
|
||||
|
||||
To include Eureka Server in your project, use the starter with a group ID of `org.springframework.cloud` and an artifact ID of `spring-cloud-starter-netflix-eureka-server`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
NOTE: If your project already uses Thymeleaf as its template engine, the Freemarker templates of the Eureka server may not be loaded correctly. In this case it is necessary to configure the template loader manually:
|
||||
|
||||
@@ -443,7 +443,7 @@ eureka:
|
||||
hostname: peer1
|
||||
client:
|
||||
serviceUrl:
|
||||
defaultZone: http://peer2/eureka/
|
||||
defaultZone: https://peer2/eureka/
|
||||
|
||||
---
|
||||
spring:
|
||||
@@ -453,7 +453,7 @@ eureka:
|
||||
hostname: peer2
|
||||
client:
|
||||
serviceUrl:
|
||||
defaultZone: http://peer1/eureka/
|
||||
defaultZone: https://peer1/eureka/
|
||||
----
|
||||
|
||||
In the preceding example, we have a YAML file that can be used to run the same server on two hosts (`peer1` and `peer2`) by running it in different Spring profiles.
|
||||
@@ -472,7 +472,7 @@ the registrations amongst themselves.
|
||||
eureka:
|
||||
client:
|
||||
serviceUrl:
|
||||
defaultZone: http://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/
|
||||
defaultZone: https://peer1/eureka/,http://peer2/eureka/,http://peer3/eureka/
|
||||
|
||||
---
|
||||
spring:
|
||||
@@ -549,7 +549,7 @@ when running a Eureka server you must include these dependencies in your POM or
|
||||
|
||||
== Circuit Breaker: Hystrix Clients
|
||||
|
||||
Netflix has created a library called https://github.com/Netflix/Hystrix[Hystrix] that implements the http://martinfowler.com/bliki/CircuitBreaker.html[circuit breaker pattern].
|
||||
Netflix has created a library called https://github.com/Netflix/Hystrix[Hystrix] that implements the https://martinfowler.com/bliki/CircuitBreaker.html[circuit breaker pattern].
|
||||
In a microservice architecture, it is common to have multiple layers of service calls, as shown in the following example:
|
||||
|
||||
.Microservice Graph
|
||||
@@ -571,7 +571,7 @@ Fallbacks may be chained so that the first fallback makes some other business ca
|
||||
|
||||
To include Hystrix in your project, use the starter with a group ID of `org.springframework.cloud`
|
||||
and a artifact ID of `spring-cloud-starter-netflix-hystrix`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
The following example shows a minimal Eureka server with a Hystrix circuit breaker:
|
||||
|
||||
@@ -688,7 +688,7 @@ be slightly more than three seconds.
|
||||
=== How to Include the Hystrix Dashboard
|
||||
|
||||
To include the Hystrix Dashboard in your project, use the starter with a group ID of `org.springframework.cloud` and an artifact ID of `spring-cloud-starter-netflix-hystrix-dashboard`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
To run the Hystrix Dashboard, annotate your Spring Boot main class with `@EnableHystrixDashboard`.
|
||||
Then visit `/hystrix` and point the dashboard to an individual instance's `/hystrix.stream` endpoint in a Hystrix client application.
|
||||
@@ -720,7 +720,7 @@ eureka:
|
||||
The `turbine.appConfig` configuration key is a list of Eureka serviceIds that turbine uses to lookup instances.
|
||||
The turbine stream is then used in the Hystrix dashboard with a URL similar to the following:
|
||||
|
||||
`http://my.turbine.server:8080/turbine.stream?cluster=CLUSTERNAME`
|
||||
`https://my.turbine.server:8080/turbine.stream?cluster=CLUSTERNAME`
|
||||
|
||||
The cluster parameter can be omitted if the name is `default`.
|
||||
The `cluster` parameter must match an entry in `turbine.aggregator.clusterConfig`.
|
||||
@@ -799,7 +799,7 @@ The Turbine Stream server requires the use of Spring Webflux, therefore `spring-
|
||||
By default `spring-boot-starter-webflux` is included when adding `spring-cloud-starter-netflix-turbine-stream` to your application.
|
||||
|
||||
You can then point the Hystrix Dashboard to the Turbine Stream Server instead of individual Hystrix streams.
|
||||
If Turbine Stream is running on port 8989 on myhost, then put `http://myhost:8989` in the stream input field in the Hystrix Dashboard.
|
||||
If Turbine Stream is running on port 8989 on myhost, then put `https://myhost:8989` in the stream input field in the Hystrix Dashboard.
|
||||
Circuits are prefixed by their respective `serviceId`, followed by a dot (`.`), and then the circuit name.
|
||||
|
||||
Spring Cloud provides a `spring-cloud-starter-netflix-turbine-stream` that has all the dependencies you need to get a Turbine Stream server running.
|
||||
@@ -811,10 +811,10 @@ Unlike Turbine server, Turbine Stream uses eureka serviceIds as cluster names an
|
||||
If Turbine Stream server is running on port 8989 on `my.turbine.server` and you have two eureka serviceIds `customers` and `products` in your environment, the following URLs will be available on your Turbine Stream server. `default` and empty cluster name will provide all metrics that Turbine Stream server receives.
|
||||
|
||||
----
|
||||
http://my.turbine.sever:8989/turbine.stream?cluster=customers
|
||||
http://my.turbine.sever:8989/turbine.stream?cluster=products
|
||||
http://my.turbine.sever:8989/turbine.stream?cluster=default
|
||||
http://my.turbine.sever:8989/turbine.stream
|
||||
https://my.turbine.sever:8989/turbine.stream?cluster=customers
|
||||
https://my.turbine.sever:8989/turbine.stream?cluster=products
|
||||
https://my.turbine.sever:8989/turbine.stream?cluster=default
|
||||
https://my.turbine.sever:8989/turbine.stream
|
||||
----
|
||||
|
||||
So, you can use eureka serviceIds as cluster names for your Turbine dashboard (or any compatible dashboard).
|
||||
@@ -839,7 +839,7 @@ This contains (amongst other things) an `ILoadBalancer`, a `RestClient`, and a `
|
||||
=== How to Include Ribbon
|
||||
|
||||
To include Ribbon in your project, use the starter with a group ID of `org.springframework.cloud` and an artifact ID of `spring-cloud-starter-netflix-ribbon`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
=== Customizing the Ribbon Client
|
||||
|
||||
@@ -980,7 +980,7 @@ public class MyClass {
|
||||
|
||||
public void doStuff() {
|
||||
ServiceInstance instance = loadBalancer.choose("stores");
|
||||
URI storesUri = URI.create(String.format("http://%s:%s", instance.getHost(), instance.getPort()));
|
||||
URI storesUri = URI.create(String.format("https://%s:%s", instance.getHost(), instance.getPort()));
|
||||
// ... do something with the URI
|
||||
}
|
||||
}
|
||||
@@ -1058,7 +1058,7 @@ If you do not put any value with `LOAD_BALANCER_KEY` in `RequestContext`, null i
|
||||
|
||||
https://github.com/Netflix/archaius[Archaius] is the Netflix client-side configuration library.
|
||||
It is the library used by all of the Netflix OSS components for configuration.
|
||||
Archaius is an extension of the http://commons.apache.org/proper/commons-configuration[Apache Commons Configuration] project.
|
||||
Archaius is an extension of the https://commons.apache.org/proper/commons-configuration[Apache Commons Configuration] project.
|
||||
It allows updates to configuration by either polling a source for changes or by letting a source push changes to the client.
|
||||
Archaius uses Dynamic<Type>Property classes as handles to properties, as shown in the following example:
|
||||
|
||||
@@ -1087,7 +1087,7 @@ Routing is an integral part of a microservice architecture.
|
||||
For example, `/` may be mapped to your web application, `/api/users` is mapped to the user service and `/api/shop` is mapped to the shop service.
|
||||
https://github.com/Netflix/zuul[Zuul] is a JVM-based router and server-side load balancer from Netflix.
|
||||
|
||||
http://www.slideshare.net/MikeyCohen1/edge-architecture-ieee-international-conference-on-cloud-engineering-32240146/27[Netflix uses Zuul] for the following:
|
||||
https://www.slideshare.net/MikeyCohen1/edge-architecture-ieee-international-conference-on-cloud-engineering-32240146/27[Netflix uses Zuul] for the following:
|
||||
|
||||
* Authentication
|
||||
* Insights
|
||||
@@ -1111,7 +1111,7 @@ NOTE: The default Hystrix isolation pattern (`ExecutionIsolationStrategy`) for a
|
||||
=== How to Include Zuul
|
||||
|
||||
To include Zuul in your project, use the starter with a group ID of `org.springframework.cloud` and a artifact ID of `spring-cloud-starter-netflix-zuul`.
|
||||
See the http://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
See the https://projects.spring.io/spring-cloud/[Spring Cloud Project page] for details on setting up your build system with the current Spring Cloud Release Train.
|
||||
|
||||
[[netflix-zuul-reverse-proxy]]
|
||||
=== Embedded Zuul Reverse Proxy
|
||||
@@ -1177,7 +1177,7 @@ The location of the back end can be specified as either a `serviceId` (for a ser
|
||||
routes:
|
||||
users:
|
||||
path: /myusers/**
|
||||
url: http://example.com/users_service
|
||||
url: https://example.com/users_service
|
||||
----
|
||||
|
||||
These simple url-routes do not get executed as a `HystrixCommand`, nor do they load-balance multiple URLs with Ribbon.
|
||||
@@ -1204,7 +1204,7 @@ hystrix:
|
||||
myusers-service:
|
||||
ribbon:
|
||||
NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
|
||||
listOfServers: http://example1.com,http://example2.com
|
||||
listOfServers: https://example1.com,http://example2.com
|
||||
ConnectTimeout: 1000
|
||||
ReadTimeout: 3000
|
||||
MaxTotalHttpConnections: 500
|
||||
@@ -1440,7 +1440,7 @@ The following example shows the configuration details for a "`strangle`" scenari
|
||||
routes:
|
||||
first:
|
||||
path: /first/**
|
||||
url: http://first.example.com
|
||||
url: https://first.example.com
|
||||
second:
|
||||
path: /second/**
|
||||
url: forward:/second
|
||||
@@ -1449,7 +1449,7 @@ The following example shows the configuration details for a "`strangle`" scenari
|
||||
url: forward:/3rd
|
||||
legacy:
|
||||
path: /**
|
||||
url: http://legacy.example.com
|
||||
url: https://legacy.example.com
|
||||
----
|
||||
|
||||
In the preceding example, we are strangle the "`legacy`" application, which is mapped to all requests that do not match one of the other patterns.
|
||||
@@ -1710,13 +1710,13 @@ public WebMvcConfigurer corsConfigurer() {
|
||||
return new WebMvcConfigurer() {
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/path-1/**")
|
||||
.allowedOrigins("http://allowed-origin.com")
|
||||
.allowedOrigins("https://allowed-origin.com")
|
||||
.allowedMethods("GET", "POST");
|
||||
}
|
||||
};
|
||||
}
|
||||
----
|
||||
In the example above, we allow `GET` and `POST` methods from `http://allowed-origin.com` to send cross-origin requests to the endpoints starting with `path-1`.
|
||||
In the example above, we allow `GET` and `POST` methods from `https://allowed-origin.com` to send cross-origin requests to the endpoints starting with `path-1`.
|
||||
You can apply CORS configuration to a specific path pattern or globally for the whole application, using `/**` mapping.
|
||||
You can customize properties: `allowedOrigins`,`allowedMethods`,`allowedHeaders`,`exposedHeaders`,`allowCredentials` and `maxAge` via this configuration.
|
||||
|
||||
@@ -2043,14 +2043,14 @@ The following example response for `/hosts/customers` returns two instances on d
|
||||
{
|
||||
"host": "myhost",
|
||||
"port": 9000,
|
||||
"uri": "http://myhost:9000",
|
||||
"uri": "https://myhost:9000",
|
||||
"serviceId": "CUSTOMERS",
|
||||
"secure": false
|
||||
},
|
||||
{
|
||||
"host": "myhost2",
|
||||
"port": 9000,
|
||||
"uri": "http://myhost2:9000",
|
||||
"uri": "https://myhost2:9000",
|
||||
"serviceId": "CUSTOMERS",
|
||||
"secure": false
|
||||
}
|
||||
@@ -2066,7 +2066,7 @@ If the Config Server is registered with Eureka, the non-JVM application can acce
|
||||
If the `serviceId` of the ConfigServer is `configserver` and the Sidecar is on port 5678, then it can be accessed at http://localhost:5678/configserver.
|
||||
|
||||
Non-JVM applications can take advantage of the Config Server's ability to return YAML documents.
|
||||
For example, a call to http://sidecar.local.spring.io:5678/configserver/default-master.yml
|
||||
For example, a call to https://sidecar.local.spring.io:5678/configserver/default-master.yml
|
||||
might result in a YAML document resembling the following:
|
||||
|
||||
[source,yaml]
|
||||
|
||||
@@ -241,7 +241,7 @@ public class EurekaClientConfigBean implements EurekaClientConfig, Ordered {
|
||||
*
|
||||
* Typically the eureka server URLs carry protocol,host,port,context and version
|
||||
* information if any. Example:
|
||||
* http://ec2-256-156-243-129.compute-1.amazonaws.com:7001/eureka/
|
||||
* https://ec2-256-156-243-129.compute-1.amazonaws.com:7001/eureka/
|
||||
*
|
||||
* The changes are effective at runtime at the next service url refresh cycle as
|
||||
* specified by eurekaServiceUrlPollIntervalSeconds.
|
||||
|
||||
@@ -474,7 +474,7 @@ public class EurekaClientAutoConfigurationTests {
|
||||
@Test
|
||||
public void basicAuth() {
|
||||
TestPropertyValues.of("server.port=8989",
|
||||
"eureka.client.serviceUrl.defaultZone=http://user:foo@example.com:80/eureka")
|
||||
"eureka.client.serviceUrl.defaultZone=https://user:foo@example.com:80/eureka")
|
||||
.applyTo(this.context);
|
||||
setupContext(MockClientConfiguration.class);
|
||||
// ApacheHttpClient4 http = this.context.getBean(ApacheHttpClient4.class);
|
||||
|
||||
@@ -58,15 +58,15 @@ public class EurekaClientConfigBeanTests {
|
||||
|
||||
@Test
|
||||
public void serviceUrl() {
|
||||
TestPropertyValues.of("eureka.client.serviceUrl.defaultZone:http://example.com")
|
||||
TestPropertyValues.of("eureka.client.serviceUrl.defaultZone:https://example.com")
|
||||
.applyTo(this.context);
|
||||
this.context.register(PropertyPlaceholderAutoConfiguration.class,
|
||||
TestConfiguration.class);
|
||||
this.context.refresh();
|
||||
assertThat(this.context.getBean(EurekaClientConfigBean.class).getServiceUrl()
|
||||
.toString()).isEqualTo("{defaultZone=http://example.com}");
|
||||
.toString()).isEqualTo("{defaultZone=https://example.com}");
|
||||
assertThat(getEurekaServiceUrlsForDefaultZone())
|
||||
.isEqualTo("[http://example.com/]");
|
||||
.isEqualTo("[https://example.com/]");
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -76,38 +76,38 @@ public class EurekaClientConfigBeanTests {
|
||||
source.addPropertySource(new MapPropertySource("config",
|
||||
Collections.<String, Object>singletonMap(
|
||||
"eureka.client.serviceUrl.defaultZone",
|
||||
"http://example.com,http://example2.com, http://example3.com")));
|
||||
"https://example.com,https://example2.com, https://www.hugedomains.com/domain_profile.cfm?d=example3&e=com")));
|
||||
this.context.register(PropertyPlaceholderAutoConfiguration.class,
|
||||
TestConfiguration.class);
|
||||
this.context.refresh();
|
||||
assertThat(this.context.getBean(EurekaClientConfigBean.class).getServiceUrl()
|
||||
.toString()).isEqualTo(
|
||||
"{defaultZone=http://example.com,http://example2.com, http://example3.com}");
|
||||
"{defaultZone=https://example.com,https://example2.com, https://www.hugedomains.com/domain_profile.cfm?d=example3&e=com}");
|
||||
assertThat(getEurekaServiceUrlsForDefaultZone()).isEqualTo(
|
||||
"[http://example.com/, http://example2.com/, http://example3.com/]");
|
||||
"[https://example.com/, https://example2.com/, https://www.hugedomains.com/domain_profile.cfm?d=example3&e=com/]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serviceUrlWithDefault() {
|
||||
TestPropertyValues.of("eureka.client.serviceUrl.defaultZone:http://example.com")
|
||||
TestPropertyValues.of("eureka.client.serviceUrl.defaultZone:https://example.com")
|
||||
.applyTo(this.context);
|
||||
this.context.register(PropertyPlaceholderAutoConfiguration.class,
|
||||
TestConfiguration.class);
|
||||
this.context.refresh();
|
||||
assertThat(getEurekaServiceUrlsForDefaultZone())
|
||||
.isEqualTo("[http://example.com/]");
|
||||
.isEqualTo("[https://example.com/]");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serviceUrlWithCustomZone() {
|
||||
TestPropertyValues
|
||||
.of("eureka.client.serviceUrl.customZone:http://custom-example.com")
|
||||
.of("eureka.client.serviceUrl.customZone:https://custom-example.com")
|
||||
.applyTo(this.context);
|
||||
this.context.register(PropertyPlaceholderAutoConfiguration.class,
|
||||
TestConfiguration.class);
|
||||
this.context.refresh();
|
||||
assertThat(getEurekaServiceUrls("customZone"))
|
||||
.isEqualTo("[http://custom-example.com/]");
|
||||
.isEqualTo("[https://custom-example.com/]");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -90,7 +90,7 @@ public class RibbonEurekaAutoConfigurationTests {
|
||||
|
||||
public void doStuff() {
|
||||
ServiceInstance serviceInstance = loadBalancerClient
|
||||
.choose("http://host/doStuff");
|
||||
.choose("https://host/doStuff");
|
||||
if (serviceInstance != null) {
|
||||
log.info(
|
||||
"There is a service instance, because Eureka discovery is enabled and the service is registered");
|
||||
|
||||
@@ -32,13 +32,13 @@ import static org.springframework.cloud.netflix.eureka.server.EurekaControllerTe
|
||||
|
||||
public class EurekaControllerReplicasTests {
|
||||
|
||||
String noAuthList1 = "http://test1.com";
|
||||
String noAuthList1 = "https://test1.com";
|
||||
|
||||
String noAuthList2 = noAuthList1 + ",http://test2.com";
|
||||
String noAuthList2 = noAuthList1 + ",https://test2.com";
|
||||
|
||||
String authList1 = "http://user:pwd@test1.com";
|
||||
String authList1 = "https://user:pwd@test1.com";
|
||||
|
||||
String authList2 = authList1 + ",http://user2:pwd2@test2.com";
|
||||
String authList2 = authList1 + ",https://user2:pwd2@test2.com";
|
||||
|
||||
String combinationAuthList1 = "http://test1.com,http://user2:pwd2@test2.com";
|
||||
|
||||
|
||||
@@ -82,11 +82,11 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
public void notUpdatedWhenDnsIsTrue() {
|
||||
changeProperty("eureka.client.use-dns-for-fetching-service-urls=true",
|
||||
"eureka.client.region=unavailable-region", // to force defaultZone
|
||||
"eureka.client.service-url.defaultZone=http://default-host1:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://default-host1:8678/eureka/");
|
||||
this.context.publishEvent(new EnvironmentChangeEvent(
|
||||
new HashSet<String>(Arrays.asList(USE_DNS, DEFAULT_ZONE))));
|
||||
|
||||
assertThat(serviceUrlMatches("http://default-host1:8678/eureka/")).as(
|
||||
assertThat(serviceUrlMatches("https://default-host1:8678/eureka/")).as(
|
||||
"PeerEurekaNodes' are updated when eureka.client.use-dns-for-fetching-service-urls is true")
|
||||
.isFalse();
|
||||
}
|
||||
@@ -95,11 +95,11 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
public void updatedWhenDnsIsFalse() {
|
||||
changeProperty("eureka.client.use-dns-for-fetching-service-urls=false",
|
||||
"eureka.client.region=unavailable-region", // to force defaultZone
|
||||
"eureka.client.service-url.defaultZone=http://default-host2:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://default-host2:8678/eureka/");
|
||||
this.context.publishEvent(new EnvironmentChangeEvent(
|
||||
new HashSet<String>(Arrays.asList(USE_DNS, DEFAULT_ZONE))));
|
||||
|
||||
assertThat(serviceUrlMatches("http://default-host2:8678/eureka/")).as(
|
||||
assertThat(serviceUrlMatches("https://default-host2:8678/eureka/")).as(
|
||||
"PeerEurekaNodes' are not updated when eureka.client.use-dns-for-fetching-service-urls is false")
|
||||
.isTrue();
|
||||
}
|
||||
@@ -110,18 +110,18 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
"eureka.client.region=region1",
|
||||
"eureka.client.availability-zones.region1=region1-zone",
|
||||
"eureka.client.availability-zones.region2=region2-zone",
|
||||
"eureka.client.service-url.region1-zone=http://region1-zone-host:8678/eureka/",
|
||||
"eureka.client.service-url.region2-zone=http://region2-zone-host:8678/eureka/");
|
||||
"eureka.client.service-url.region1-zone=https://region1-zone-host:8678/eureka/",
|
||||
"eureka.client.service-url.region2-zone=https://region2-zone-host:8678/eureka/");
|
||||
this.context
|
||||
.publishEvent(new EnvironmentChangeEvent(Collections.singleton(REGION)));
|
||||
assertThat(serviceUrlMatches("http://region1-zone-host:8678/eureka/")).as(
|
||||
assertThat(serviceUrlMatches("https://region1-zone-host:8678/eureka/")).as(
|
||||
"PeerEurekaNodes' are not updated when eureka.client.region is changed")
|
||||
.isTrue();
|
||||
|
||||
changeProperty("eureka.client.region=region2");
|
||||
this.context
|
||||
.publishEvent(new EnvironmentChangeEvent(Collections.singleton(REGION)));
|
||||
assertThat(serviceUrlMatches("http://region2-zone-host:8678/eureka/")).as(
|
||||
assertThat(serviceUrlMatches("https://region2-zone-host:8678/eureka/")).as(
|
||||
"PeerEurekaNodes' are not updated when eureka.client.region is changed")
|
||||
.isTrue();
|
||||
}
|
||||
@@ -131,17 +131,17 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
changeProperty("eureka.client.use-dns-for-fetching-service-urls=false",
|
||||
"eureka.client.region=region4",
|
||||
"eureka.client.availability-zones.region3=region3-zone",
|
||||
"eureka.client.service-url.region4-zone=http://region4-zone-host:8678/eureka/",
|
||||
"eureka.client.service-url.defaultZone=http://default-host3:8678/eureka/");
|
||||
"eureka.client.service-url.region4-zone=https://region4-zone-host:8678/eureka/",
|
||||
"eureka.client.service-url.defaultZone=https://default-host3:8678/eureka/");
|
||||
this.context.publishEvent(new EnvironmentChangeEvent(
|
||||
Collections.singleton("eureka.client.availability-zones.region3")));
|
||||
assertThat(this.peerEurekaNodes.getPeerEurekaNodes().get(0).getServiceUrl()
|
||||
.equals("http://default-host3:8678/eureka/")).isTrue();
|
||||
.equals("https://default-host3:8678/eureka/")).isTrue();
|
||||
|
||||
changeProperty("eureka.client.availability-zones.region4=region4-zone");
|
||||
this.context.publishEvent(new EnvironmentChangeEvent(
|
||||
Collections.singleton("eureka.client.availability-zones.region4")));
|
||||
assertThat(serviceUrlMatches("http://region4-zone-host:8678/eureka/")).as(
|
||||
assertThat(serviceUrlMatches("https://region4-zone-host:8678/eureka/")).as(
|
||||
"PeerEurekaNodes' are not updated when eureka.client.availability-zones are changed")
|
||||
.isTrue();
|
||||
}
|
||||
@@ -191,7 +191,7 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
@Test
|
||||
public void serviceUrlsCountAsSoonAsRefreshed() {
|
||||
changeProperty(
|
||||
"eureka.client.service-url.defaultZone=http://defaul-host3:8678/eureka/,http://defaul-host4:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://defaul-host3:8678/eureka/,http://defaul-host4:8678/eureka/");
|
||||
forceUpdate();
|
||||
assertThat(this.peerEurekaNodes.getPeerEurekaNodes().size())
|
||||
.as("PeerEurekaNodes' peer count is incorrect.").isEqualTo(2);
|
||||
@@ -200,23 +200,23 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
@Test
|
||||
public void serviceUrlsValueAsSoonAsRefreshed() {
|
||||
changeProperty(
|
||||
"eureka.client.service-url.defaultZone=http://defaul-host4:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://defaul-host4:8678/eureka/");
|
||||
forceUpdate();
|
||||
assertThat(serviceUrlMatches("http://defaul-host4:8678/eureka/"))
|
||||
assertThat(serviceUrlMatches("https://defaul-host4:8678/eureka/"))
|
||||
.as("PeerEurekaNodes' new peer[0] is incorrect").isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dashboardUpdatedAsSoonAsRefreshed() {
|
||||
changeProperty(
|
||||
"eureka.client.service-url.defaultZone=http://defaul-host5:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://defaul-host5:8678/eureka/");
|
||||
forceUpdate();
|
||||
final ResponseEntity<String> entity = new TestRestTemplate()
|
||||
.getForEntity("http://localhost:" + this.port + "/", String.class);
|
||||
assertThat(entity.getStatusCode()).isEqualTo(HttpStatus.OK);
|
||||
final String body = entity.getBody();
|
||||
assertThat(body).isNotNull();
|
||||
assertThat(body.contains("http://defaul-host5:8678/eureka/"))
|
||||
assertThat(body.contains("https://defaul-host5:8678/eureka/"))
|
||||
.as("DS Replicas not updated in the Eureka Server dashboard").isTrue();
|
||||
}
|
||||
|
||||
@@ -224,10 +224,10 @@ public class RefreshablePeerEurekaNodesTests {
|
||||
public void notUpdatedForRelaxedKeys() {
|
||||
changeProperty("eureka.client.use-dns-for-fetching-service-urls=false",
|
||||
"eureka.client.region=unavailable-region", // to force defaultZone
|
||||
"eureka.client.service-url.defaultZone=http://defaul-host6:8678/eureka/");
|
||||
"eureka.client.service-url.defaultZone=https://defaul-host6:8678/eureka/");
|
||||
this.context.publishEvent(new EnvironmentChangeEvent(
|
||||
Collections.singleton("eureka.client.serviceUrl.defaultZone")));
|
||||
assertThat(serviceUrlMatches("http://defaul-host6:8678/eureka/"))
|
||||
assertThat(serviceUrlMatches("https://defaul-host6:8678/eureka/"))
|
||||
.as("PeerEurekaNodes' are updated for keys with relaxed binding")
|
||||
.isFalse();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SimpleGrid - a fork of CSSGrid by Crowd Favorite (https://github.com/crowdfavorite/css-grid)
|
||||
* http://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (http://earlymade.com)
|
||||
* License: http://creativecommons.org/licenses/MIT/ */
|
||||
* https://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (https://earlymade.com)
|
||||
* License: https://creativecommons.org/licenses/MIT/ */
|
||||
|
||||
/* Containers */
|
||||
body { font-size: 1.125em; }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SimpleGrid - a fork of CSSGrid by Crowd Favorite (https://github.com/crowdfavorite/css-grid)
|
||||
* http://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (http://earlymade.com)
|
||||
* License: http://creativecommons.org/licenses/MIT/ */
|
||||
* https://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (https://earlymade.com)
|
||||
* License: https://creativecommons.org/licenses/MIT/ */
|
||||
|
||||
/* Containers */
|
||||
body { font-size: 0.875em; padding: 0; }
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/* SimpleGrid - a fork of CSSGrid by Crowd Favorite (https://github.com/crowdfavorite/css-grid)
|
||||
* http://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (http://earlymade.com)
|
||||
* License: http://creativecommons.org/licenses/MIT/ */
|
||||
* https://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (https://earlymade.com)
|
||||
* License: https://creativecommons.org/licenses/MIT/ */
|
||||
|
||||
/* Containers */
|
||||
body { font-size: 100%; }
|
||||
|
||||
@@ -1 +1 @@
|
||||
http://simplegrid.info/
|
||||
https://simplegrid.info/
|
||||
@@ -1,9 +1,9 @@
|
||||
/* Extension of SimpleGrid by benjchristensen to allow percentage based sizing on very large displays
|
||||
*
|
||||
* SimpleGrid - a fork of CSSGrid by Crowd Favorite (https://github.com/crowdfavorite/css-grid)
|
||||
* http://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (http://earlymade.com)
|
||||
* License: http://creativecommons.org/licenses/MIT/ */
|
||||
* https://simplegrid.info
|
||||
* by Conor Muirhead (http://conor.cc) of Early LLC (https://earlymade.com)
|
||||
* License: https://creativecommons.org/licenses/MIT/ */
|
||||
|
||||
/* Containers */
|
||||
body { font-size: 1.125em; }
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
*
|
||||
* Version: 1.0.5
|
||||
*
|
||||
* Copyright (c) 2008-2011 Ron Valstar http://www.sjeiti.com/
|
||||
* Copyright (c) 2008-2011 Ron Valstar http://ronvalstar.nl/
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* https://www.opensource.org/licenses/mit-license.php
|
||||
* https://www.gnu.org/licenses/gpl.html
|
||||
*/
|
||||
(function(b){b.tinysort={id:"TinySort",version:"1.0.5",copyright:"Copyright (c) 2008-2011 Ron Valstar",uri:"http://tinysort.sjeiti.com/",defaults:{order:"asc",attr:"",place:"start",returns:false,useVal:false}};b.fn.extend({tinysort:function(h,j){if(h&&typeof(h)!="string"){j=h;h=null}var e=b.extend({},b.tinysort.defaults,j);var p={};this.each(function(t){var v=(!h||h=="")?b(this):b(this).find(h);var u=e.order=="rand"?""+Math.random():(e.attr==""?(e.useVal?v.val():v.text()):v.attr(e.attr));var s=b(this).parent();if(!p[s]){p[s]={s:[],n:[]}}if(v.length>0){p[s].s.push({s:u,e:b(this),n:t})}else{p[s].n.push({e:b(this),n:t})}});for(var g in p){var d=p[g];d.s.sort(function k(t,s){var i=t.s.toLowerCase?t.s.toLowerCase():t.s;var u=s.s.toLowerCase?s.s.toLowerCase():s.s;if(c(t.s)&&c(s.s)){i=parseFloat(t.s);u=parseFloat(s.s)}return(e.order=="asc"?1:-1)*(i<u?-1:(i>u?1:0))})}var m=[];for(var g in p){var d=p[g];var n=[];var f=b(this).length;switch(e.place){case"first":b.each(d.s,function(s,t){f=Math.min(f,t.n)});break;case"org":b.each(d.s,function(s,t){n.push(t.n)});break;case"end":f=d.n.length;break;default:f=0}var q=[0,0];for(var l=0;l<b(this).length;l++){var o=l>=f&&l<f+d.s.length;if(a(n,l)){o=true}var r=(o?d.s:d.n)[q[o?0:1]].e;r.parent().append(r);if(o||!e.returns){m.push(r.get(0))}q[o?0:1]++}}return this.pushStack(m)}});function c(e){var d=/^\s*?[\+-]?(\d*\.?\d*?)\s*?$/.exec(e);return d&&d.length>0?d[1]:false}function a(e,f){var d=false;b.each(e,function(h,g){if(!d){d=g==f}});return d}b.fn.TinySort=b.fn.Tinysort=b.fn.tsort=b.fn.tinysort})(jQuery);
|
||||
@@ -1,7 +1,7 @@
|
||||
|
||||
//Simple JavaScript Templating
|
||||
//John Resig - http://ejohn.org/ - MIT Licensed
|
||||
// http://ejohn.org/blog/javascript-micro-templating/
|
||||
//John Resig - https://johnresig.com/ - MIT Licensed
|
||||
// https://johnresig.com/blog/javascript-micro-templating/
|
||||
(function(window, undefined) {
|
||||
var cache = {};
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<#import "/spring.ftl" as spring />
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<base href="${basePath}">
|
||||
@@ -36,13 +36,13 @@
|
||||
<br>
|
||||
|
||||
<h2>Hystrix Dashboard</h2>
|
||||
<input id="stream" type="textfield" size="120" placeholder="http://hostname:port/turbine/turbine.stream"></input>
|
||||
<input id="stream" type="textfield" size="120" placeholder="https://hostname:port/turbine/turbine.stream"></input>
|
||||
<br><br>
|
||||
<i>Cluster via Turbine (default cluster):</i> http://turbine-hostname:port/turbine.stream
|
||||
<i>Cluster via Turbine (default cluster):</i> https://turbine-hostname:port/turbine.stream
|
||||
<br>
|
||||
<i>Cluster via Turbine (custom cluster):</i> http://turbine-hostname:port/turbine.stream?cluster=[clusterName]
|
||||
<i>Cluster via Turbine (custom cluster):</i> https://turbine-hostname:port/turbine.stream?cluster=[clusterName]
|
||||
<br>
|
||||
<i>Single Hystrix App:</i> http://hystrix-app:port/actuator/hystrix.stream
|
||||
<i>Single Hystrix App:</i> https://hystrix-app:port/actuator/hystrix.stream
|
||||
<br><br>
|
||||
Delay: <input id="delay" type="textfield" size="10" placeholder="2000"></input>ms
|
||||
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
});
|
||||
|
||||
//Read a page's GET URL variables and return them as an associative array.
|
||||
// from: http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
|
||||
// from: https://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
|
||||
function getUrlVars()
|
||||
{
|
||||
var vars = [], hash;
|
||||
|
||||
@@ -61,7 +61,7 @@ public class HttpClientStatusCodeExceptionTest {
|
||||
doReturn(entity).when(response).getEntity();
|
||||
HttpEntity copiedEntity = HttpClientUtils.createEntity(response);
|
||||
HttpClientStatusCodeException ex = new HttpClientStatusCodeException("service",
|
||||
response, copiedEntity, new URI("http://service.com"));
|
||||
response, copiedEntity, new URI("https://service.com"));
|
||||
assertThat(ex.getResponse().getLocale().toString()).isEqualTo("en");
|
||||
assertThat(ex.getResponse().getAllHeaders()).isEqualTo(headers);
|
||||
assertThat(ex.getResponse().getStatusLine().getReasonPhrase())
|
||||
|
||||
@@ -43,10 +43,11 @@ public class OkHttpStatusCodeExceptionTest {
|
||||
.message("Success")
|
||||
.body(ResponseBody.create(MediaType.parse("text/plain"), "foo"))
|
||||
.protocol(Protocol.HTTP_1_1)
|
||||
.request(new Request.Builder().url("http://service.com").build()).build();
|
||||
.request(new Request.Builder().url("https://service.com").build())
|
||||
.build();
|
||||
ResponseBody body = response.peekBody(Integer.MAX_VALUE);
|
||||
OkHttpStatusCodeException ex = new OkHttpStatusCodeException("service", response,
|
||||
body, new URI("http://service.com"));
|
||||
body, new URI("https://service.com"));
|
||||
assertThat(ex.getResponse().headers()).isEqualTo(headers);
|
||||
assertThat(ex.getResponse().code()).isEqualTo(200);
|
||||
assertThat(ex.getResponse().message()).isEqualTo("Success");
|
||||
|
||||
@@ -91,7 +91,7 @@ public class RibbonClientConfigurationTests {
|
||||
when(this.inspector.isSecure(server)).thenReturn(true);
|
||||
|
||||
for (AbstractLoadBalancerAwareClient client : clients()) {
|
||||
URI uri = client.reconstructURIWithServer(server, new URI("http://foo/"));
|
||||
URI uri = client.reconstructURIWithServer(server, new URI("https://foo/"));
|
||||
assertThat(uri).as(getReason(client)).isEqualTo(new URI("https://foo:7777/"));
|
||||
}
|
||||
}
|
||||
@@ -102,8 +102,8 @@ public class RibbonClientConfigurationTests {
|
||||
when(this.inspector.isSecure(server)).thenReturn(false);
|
||||
|
||||
for (AbstractLoadBalancerAwareClient client : clients()) {
|
||||
URI uri = client.reconstructURIWithServer(server, new URI("http://foo/"));
|
||||
assertThat(uri).as(getReason(client)).isEqualTo(new URI("http://foo:7777/"));
|
||||
URI uri = client.reconstructURIWithServer(server, new URI("https://foo/"));
|
||||
assertThat(uri).as(getReason(client)).isEqualTo(new URI("https://foo:7777/"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,7 +118,7 @@ public class RibbonClientConfigurationTests {
|
||||
|
||||
for (AbstractLoadBalancerAwareClient client : clients()) {
|
||||
URI uri = client.reconstructURIWithServer(server,
|
||||
new URI("http://foo/%20bar"));
|
||||
new URI("https://foo/%20bar"));
|
||||
assertThat(uri).as(getReason(client))
|
||||
.isEqualTo(new URI("https://foo:7777/%20bar"));
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ public class RibbonClientHttpRequestFactoryTests {
|
||||
public void invalidHostNameError() {
|
||||
this.exceptionRule.expect(ResourceAccessException.class);
|
||||
this.exceptionRule.expectMessage("Invalid hostname");
|
||||
this.restTemplate.getForEntity("http://simple_bad", String.class);
|
||||
this.restTemplate.getForEntity("https://simple_bad", String.class);
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
@@ -68,7 +68,7 @@ public class RibbonInterceptorTests {
|
||||
RibbonServer server = new RibbonServer("myservice", new Server("myhost", 8080));
|
||||
LoadBalancerInterceptor interceptor = new LoadBalancerInterceptor(
|
||||
new MyClient(server));
|
||||
given(this.request.getURI()).willReturn(new URL("http://myservice").toURI());
|
||||
given(this.request.getURI()).willReturn(new URL("https://myservice").toURI());
|
||||
given(this.execution.execute(isA(HttpRequest.class), isA(byte[].class)))
|
||||
.willReturn(this.response);
|
||||
ArgumentCaptor<HttpRequestWrapper> argument = ArgumentCaptor
|
||||
@@ -79,7 +79,7 @@ public class RibbonInterceptorTests {
|
||||
verify(this.execution).execute(argument.capture(), isA(byte[].class));
|
||||
HttpRequestWrapper wrapper = argument.getValue();
|
||||
assertThat(wrapper.getURI()).as("wrong constructed uri")
|
||||
.isEqualTo(new URL("http://myhost:8080").toURI());
|
||||
.isEqualTo(new URL("https://myhost:8080").toURI());
|
||||
}
|
||||
|
||||
protected static class MyClient implements LoadBalancerClient {
|
||||
|
||||
@@ -88,7 +88,7 @@ public class RibbonUtilsTests {
|
||||
|
||||
@Test
|
||||
public void uriIsNotChangedWhenServerIsNotSecured() throws URISyntaxException {
|
||||
URI original = new URI("http://foo");
|
||||
URI original = new URI("https://foo");
|
||||
URI updated = updateToSecureConnectionIfNeeded(original, NON_SECURE_CONFIG,
|
||||
NON_SECURE_INTROSPECTOR, SERVER);
|
||||
assertThat(original)
|
||||
@@ -110,7 +110,7 @@ public class RibbonUtilsTests {
|
||||
@Test
|
||||
public void shouldUpgradeUriToHttpsWhenServerIsSecureAndUriNotInHttps()
|
||||
throws URISyntaxException {
|
||||
URI original = new URI("http://foo");
|
||||
URI original = new URI("https://foo");
|
||||
URI updated = updateToSecureConnectionIfNeeded(original, SECURE_CONFIG,
|
||||
SECURE_INTROSPECTOR, SERVER);
|
||||
assertThat(updated).as("URI should have been updated to https.")
|
||||
|
||||
@@ -44,7 +44,7 @@ public class RibbonApacheHttpRequestTests {
|
||||
|
||||
@Test
|
||||
public void testNullEntity() throws Exception {
|
||||
String uri = "http://example.com";
|
||||
String uri = "https://example.com";
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.add("my-header", "my-value");
|
||||
headers.add("content-length", "5192");
|
||||
@@ -90,7 +90,7 @@ public class RibbonApacheHttpRequestTests {
|
||||
boolean addContentLengthHeader, String method) throws IOException {
|
||||
String lengthString = String.valueOf(entityValue.length());
|
||||
Long length = null;
|
||||
URI uri = URI.create("http://example.com");
|
||||
URI uri = URI.create("https://example.com");
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
if (addContentLengthHeader) {
|
||||
headers.add("Content-Length", lengthString);
|
||||
|
||||
@@ -41,7 +41,7 @@ public class RibbonApacheHttpResponseTests {
|
||||
given(response.getStatusLine()).willReturn(statusLine);
|
||||
|
||||
RibbonApacheHttpResponse httpResponse = new RibbonApacheHttpResponse(response,
|
||||
URI.create("http://example.com"));
|
||||
URI.create("https://example.com"));
|
||||
|
||||
assertThat(httpResponse.isSuccess()).isTrue();
|
||||
assertThat(httpResponse.hasPayload()).isFalse();
|
||||
@@ -60,7 +60,7 @@ public class RibbonApacheHttpResponseTests {
|
||||
given(response.getEntity()).willReturn(entity);
|
||||
|
||||
RibbonApacheHttpResponse httpResponse = new RibbonApacheHttpResponse(response,
|
||||
URI.create("http://example.com"));
|
||||
URI.create("https://example.com"));
|
||||
|
||||
assertThat(httpResponse.isSuccess()).isTrue();
|
||||
assertThat(httpResponse.hasPayload()).isTrue();
|
||||
|
||||
@@ -39,7 +39,7 @@ public class OkHttpRibbonRequestTests {
|
||||
|
||||
@Test
|
||||
public void testNullEntity() throws Exception {
|
||||
String uri = "http://example.com";
|
||||
String uri = "https://example.com";
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.add("my-header", "my-value");
|
||||
// headers.add(HttpEncoding.CONTENT_LENGTH, "5192");
|
||||
@@ -79,7 +79,7 @@ public class OkHttpRibbonRequestTests {
|
||||
boolean addContentLengthHeader, String method) throws IOException {
|
||||
String lengthString = String.valueOf(entityValue.length());
|
||||
Long length = null;
|
||||
String uri = "http://example.com";
|
||||
String uri = "https://example.com";
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
if (addContentLengthHeader) {
|
||||
headers.add("Content-Length", lengthString);
|
||||
|
||||
@@ -37,7 +37,7 @@ public class OkHttpRibbonResponseTests {
|
||||
|
||||
@Test
|
||||
public void testNullEntity() throws Exception {
|
||||
URI uri = URI.create("http://example.com");
|
||||
URI uri = URI.create("https://example.com");
|
||||
Response response = response(uri).build();
|
||||
|
||||
OkHttpRibbonResponse httpResponse = new OkHttpRibbonResponse(response, uri);
|
||||
@@ -50,7 +50,7 @@ public class OkHttpRibbonResponseTests {
|
||||
|
||||
@Test
|
||||
public void testNotNullEntity() throws Exception {
|
||||
URI uri = URI.create("http://example.com");
|
||||
URI uri = URI.create("https://example.com");
|
||||
Response response = response(uri)
|
||||
.body(ResponseBody.create(MediaType.parse("text/plain"), "abcd")).build();
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class ContextAwareRequestTests {
|
||||
headers.put("header2", Arrays.asList("value1", "value2"));
|
||||
headers.put("header3", Arrays.asList("value1"));
|
||||
doReturn(headers).when(context).getHeaders();
|
||||
doReturn(new URI("http://foo")).when(context).uri();
|
||||
doReturn(new URI("https://foo")).when(context).uri();
|
||||
doReturn("foo").when(context).getServiceId();
|
||||
doReturn(new LinkedMultiValueMap<>()).when(context).getParams();
|
||||
doReturn("testLoadBalancerKey").when(context).getLoadBalancerKey();
|
||||
@@ -76,7 +76,7 @@ public class ContextAwareRequestTests {
|
||||
|
||||
@Test
|
||||
public void getURI() throws Exception {
|
||||
assertThat(request.getURI()).isEqualTo(new URI("http://foo"));
|
||||
assertThat(request.getURI()).isEqualTo(new URI("https://foo"));
|
||||
|
||||
RibbonCommandContext badUriContext = mock(RibbonCommandContext.class);
|
||||
doReturn(new LinkedMultiValueMap()).when(badUriContext).getHeaders();
|
||||
|
||||
@@ -124,9 +124,9 @@ public class SidecarApplicationTests {
|
||||
EurekaInstanceConfigBean config;
|
||||
|
||||
public void testStatusAndHealthCheckUrls() {
|
||||
assertThat(config.getStatusPageUrl()).isEqualTo("http://mhhost2:0/foo/info");
|
||||
assertThat(config.getStatusPageUrl()).isEqualTo("https://mhhost2:0/foo/info");
|
||||
assertThat(config.getHealthCheckUrl())
|
||||
.isEqualTo("http://mhhost2:0/foo/health");
|
||||
.isEqualTo("https://mhhost2:0/foo/health");
|
||||
}
|
||||
|
||||
}
|
||||
@@ -144,9 +144,9 @@ public class SidecarApplicationTests {
|
||||
|
||||
@Test
|
||||
public void testStatusAndHealthCheckUrls() {
|
||||
assertThat(config.getStatusPageUrl()).isEqualTo("http://mhhost2:0/foo/info");
|
||||
assertThat(config.getStatusPageUrl()).isEqualTo("https://mhhost2:0/foo/info");
|
||||
assertThat(config.getHealthCheckUrl())
|
||||
.isEqualTo("http://mhhost2:0/foo/health");
|
||||
.isEqualTo("https://mhhost2:0/foo/health");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ eureka:
|
||||
app-group-name: mysidecargroup
|
||||
client:
|
||||
serviceUrl:
|
||||
defaultZone: http://user:password@localhost:8761/eureka/
|
||||
defaultZone: https://user:password@localhost:8761/eureka/
|
||||
|
||||
ribbon:
|
||||
ServerListRefreshInterval: 5000
|
||||
|
||||
@@ -46,10 +46,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
public class TurbineHttpTests {
|
||||
|
||||
private static final ClusterInformation foo = new ClusterInformation("foo",
|
||||
"http://foo");
|
||||
"https://foo");
|
||||
|
||||
private static final ClusterInformation bar = new ClusterInformation("bar",
|
||||
"http://bar");
|
||||
"https://bar");
|
||||
|
||||
@Autowired
|
||||
TestRestTemplate rest;
|
||||
|
||||
@@ -99,7 +99,7 @@ public class ZuulProxyApplicationTests {
|
||||
@Test
|
||||
public void preflightRequestSucceedsForGetRequest() {
|
||||
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.put("Origin", singletonList("http://hello.com"));
|
||||
headers.put("Origin", singletonList("https://hello.com"));
|
||||
headers.put("Access-Control-Request-Method", singletonList("GET"));
|
||||
ResponseEntity<Void> result = testRestTemplate.exchange(url(), HttpMethod.OPTIONS,
|
||||
new HttpEntity<>(headers), Void.class);
|
||||
@@ -110,7 +110,7 @@ public class ZuulProxyApplicationTests {
|
||||
@Test
|
||||
public void preflightRequestIsForbiddenForUnsupportedMethod() {
|
||||
MultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.put("Origin", singletonList("http://hello.com"));
|
||||
headers.put("Origin", singletonList("https://hello.com"));
|
||||
headers.put("Access-Control-Request-Method", singletonList("PUT"));
|
||||
ResponseEntity<Void> result = testRestTemplate.exchange(url(), HttpMethod.OPTIONS,
|
||||
new HttpEntity<>(headers), Void.class);
|
||||
@@ -166,7 +166,7 @@ public class ZuulProxyApplicationTests {
|
||||
return new WebMvcConfigurer() {
|
||||
public void addCorsMappings(CorsRegistry registry) {
|
||||
registry.addMapping("/simplezpat/**")
|
||||
.allowedOrigins("http://hello.com")
|
||||
.allowedOrigins("https://hello.com")
|
||||
.allowedMethods("GET", "POST")
|
||||
.allowedHeaders("Authorization");
|
||||
}
|
||||
|
||||
@@ -81,7 +81,7 @@ public class ProxyRequestHelperTests {
|
||||
|
||||
MultiValueMap<String, String> headers = helper.buildZuulRequestHeaders(request);
|
||||
|
||||
helper.debug("POST", "http://example.com", headers, new LinkedMultiValueMap<>(),
|
||||
helper.debug("POST", "https://example.com", headers, new LinkedMultiValueMap<>(),
|
||||
request.getInputStream());
|
||||
HttpTrace actual = this.traceRepository.findAll().get(0);
|
||||
Assertions.assertThat(actual.getRequest().getHeaders()).containsKeys("singleName",
|
||||
|
||||
@@ -523,7 +523,7 @@ public class DiscoveryClientRouteLocatorTests {
|
||||
@Test
|
||||
public void testIgnoredRouteIncludedIfConfiguredAndNotDiscovered() {
|
||||
this.properties.getRoutes().put("foo",
|
||||
new ZuulRoute("/foo/**", "http://foo.com"));
|
||||
new ZuulRoute("/foo/**", "http://www.foo.com/"));
|
||||
DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/",
|
||||
this.discovery, this.properties);
|
||||
this.properties.setIgnoredServices(Collections.singleton("*"));
|
||||
@@ -548,7 +548,7 @@ public class DiscoveryClientRouteLocatorTests {
|
||||
@Test
|
||||
public void testAutoRoutesCanBeOverridden() {
|
||||
ZuulRoute route = new ZuulRoute("/" + MYSERVICE + "/**",
|
||||
"http://example.com/" + MYSERVICE);
|
||||
"https://example.com/" + MYSERVICE);
|
||||
this.properties.getRoutes().put(MYSERVICE, route);
|
||||
DiscoveryClientRouteLocator routeLocator = new DiscoveryClientRouteLocator("/",
|
||||
this.discovery, this.properties);
|
||||
@@ -557,7 +557,7 @@ public class DiscoveryClientRouteLocatorTests {
|
||||
List<Route> routesMap = routeLocator.getRoutes();
|
||||
assertThat(routesMap).as("routesMap was null").isNotNull();
|
||||
assertThat(routesMap.isEmpty()).as("routesMap was empty").isFalse();
|
||||
assertMapping(routesMap, "http://example.com/" + MYSERVICE, MYSERVICE);
|
||||
assertMapping(routesMap, "https://example.com/" + MYSERVICE, MYSERVICE);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -55,7 +55,7 @@ public class RestClientRibbonCommandTests {
|
||||
@Test
|
||||
@Deprecated
|
||||
public void testNullEntityWithOldConstruct() throws Exception {
|
||||
String uri = "http://example.com";
|
||||
String uri = "https://example.com";
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.add("my-header", "my-value");
|
||||
LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
||||
@@ -85,7 +85,7 @@ public class RestClientRibbonCommandTests {
|
||||
|
||||
@Test
|
||||
public void testNullEntity() throws Exception {
|
||||
String uri = "http://example.com";
|
||||
String uri = "https://example.com";
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
headers.add("my-header", "my-value");
|
||||
LinkedMultiValueMap<String, String> params = new LinkedMultiValueMap<>();
|
||||
@@ -131,7 +131,7 @@ public class RestClientRibbonCommandTests {
|
||||
boolean addContentLengthHeader, String method) throws Exception {
|
||||
String lengthString = String.valueOf(entityValue.length());
|
||||
Long length = null;
|
||||
URI uri = URI.create("http://example.com");
|
||||
URI uri = URI.create("https://example.com");
|
||||
LinkedMultiValueMap<String, String> headers = new LinkedMultiValueMap<>();
|
||||
if (addContentLengthHeader) {
|
||||
headers.add("Content-Length", lengthString);
|
||||
|
||||
Reference in New Issue
Block a user