Detailed Description
In order to make the objects, technical solutions and advantages of the present application more apparent, the following detailed description of specific embodiments of the present application is given with reference to the accompanying drawings. It is to be understood that the specific embodiments described herein are merely illustrative of the application and are not limiting thereof. It should be further noted that, for convenience of description, only some, but not all of the matters related to the present application are shown in the accompanying drawings. Before discussing exemplary embodiments in more detail, it should be mentioned that some exemplary embodiments are described as processes or methods depicted as flowcharts. Although a flowchart depicts operations (or steps) as a sequential process, many of the operations can be performed in parallel, concurrently, or at the same time. Furthermore, the order of the operations may be rearranged. The process may be terminated when its operations are completed, but may have additional steps not included in the figures. The processes may correspond to methods, functions, procedures, subroutines, and the like.
In the software development process, in order to simulate actual use, a service request needs to be sent to a gateway, and then the gateway distributes the service request to a corresponding server. Meanwhile, in order to facilitate debugging of the program, the specified service request needs to be forwarded to a local server. However, for service requests, the gateway may distribute the service requests to the appropriate backend servers to run according to pre-stored distribution policies, resulting in the service requests may not be able to run and debug on the servers that the user needs.
Aiming at the problems in the prior art, the forwarding method of the service request provided by the embodiment of the application stores the network configuration information to specify the forwarding strategy of the specific service request, and the gateway forwards the service request for service debugging sent by the specified client to the specified local back-end server for running and debugging according to the network configuration information, so that the user can conveniently debug the back-end service, the joint debugging result can be specified to be directly presented on a developed computer, and a developer can conveniently check the debugging result, thereby improving the debugging efficiency.
Fig. 1 is a method flowchart of a service request forwarding method according to an embodiment of the present application, where, as shown in fig. 1, the service request forwarding method is applied to a gateway, and includes, but is not limited to, steps S110 to S140:
step S110, obtaining network configuration information, wherein the network configuration information comprises at least one piece of service registration information, each piece of service registration information comprises a corresponding service address identifier, a registered service identifier and a plurality of registered address identifiers, the registered service identifier is used for representing a corresponding back-end service, and the service address identifier is used for identifying operation equipment of the corresponding back-end service.
In step S110, the gateway needs to acquire network configuration information. In this embodiment, the channel for obtaining the network configuration information is not limited, and the network configuration information may be obtained directly by reading a local database, or may be obtained from other electronic devices and computer systems through a data transmission interface or remote communication transmission. After the network configuration information is acquired, data extraction is required to be performed on the network configuration information to obtain service registration information of the network configuration information, so that a subsequent gateway forwards a debugging service request sent by a client to a target client for debugging.
The gateways in this embodiment may be Nginx, kong, envoy and Spring Cloud Gateway, and here, spring Cloud Gateway is taken as an example to describe the working principle of the gateway. Shown in fig. 2 is a basic process by which Spring Cloud Gateway implements network request transmission. Spring Cloud Gateway is a Spring frame based micro-service gateway that enables routing and handling of service requests through a combination of routing configuration and filter chains. When a service request is received from a gateway client (GATEWAY CLIENT), spring Cloud Gateway finds a route matching the service request in GATEWAY HANDLER MAPPING, sends it to Gateway Web Handler, gateway Web Handler, sends the service request to the actual service execution business logic through a specified Filter chain, and returns the execution result. The filters are separated by dashed lines in FIG. 2 because the filters may execute business logic before ("pre") or after ("post") the proxy request is sent. In this way Spring Cloud Gateway can provide routing, filtering, load balancing, etc. functions that help simplify inter-service communication and functional expansion in micro-service architecture.
In this embodiment, the gateway can implement specific service request processing through the network configuration information, and when receiving a service request of a client terminal with a specified IP address, the gateway can forward the service request to a server with the specified IP address, and the server with the specified IP address operates and debugs the service request. In order to implement the above specified forwarding and executing process, the network configuration information is redefined to include at least one piece of service registration information, where each piece of service registration information includes a corresponding service address identifier, a registered service identifier, and a plurality of registered address identifiers. The service address identification is used for identifying the running equipment corresponding to the back-end service. May be an IP address, hostname or other identifier that uniquely identifies the device, indicating the location of the backend service in the network. The registration service identifier is used for uniquely identifying the corresponding backend service, and the identifier can be a character string or a symbol, so that the service can be uniquely identified in the whole system. The registration address identifies a plurality of client addresses for specifying an originating service request. These addresses may be physical addresses, virtual addresses, or addresses of a service registry, for which a specified client-initiated service request can be identified. It will be appreciated that it is possible for the same service to be initiated by multiple clients, and thus multiple registration addresses may be configured as desired.
A test environment architecture diagram provided by an embodiment of the present application is shown in fig. 3, and includes a plurality of clients (exemplary client a, client B, and client C) and a plurality of servers (exemplary server a, server B, and server C), each of which is connected to a gateway. The network configuration information may be set by a client or server in the test environment, or may be set by other terminal devices. For one piece of service registration information in the network configuration information, the service request information of the client end needing the appointed IP address to be registered, namely the registration service identifier and the registration address identifier, can determine the service request needing forwarding processing through the registration service identifier and the registration address identifier. In addition, a target server needs to be configured for the service request according to actual needs, and the IP address of the target server is written into the service registration information. In the test process, the client a is used for developing front-end software, the server C is used for developing corresponding back-end software, in the test process, in order to simulate the real use process, the front-end software needs to be debugged at the client a, and a corresponding generated service request is sent to the server C to respond, so that a developer of the back-end software at the server C can conveniently check the debugging process, in the prior art, the service request can be forwarded based on the network management of the framework shown in fig. 2, but the forwarding cannot guarantee the directional sending of the service request at the receiving and sending ends. According to the embodiment of the application, the service request B on the client A is forwarded to the server C for operation and debugging by the user through the network configuration information, so that the IP address of the client A, the identification of the service request B and the IP address of the server C are written in the service registration information. Through the network configuration information, the system can establish a mapping relation between the service and the running equipment thereof, and provide the capability of confirming and accessing the back-end service for the client or gateway.
It should be noted that, the server in the embodiment of the present application is not a dedicated server in a narrow sense, but may run back-end software, and may exist in any device form, compared with another device that runs front-end software.
Step S120, the service registration information is saved in a service registration list.
In step S120, the service registration information needs to be saved in the service registration list in order to manage and maintain the registration information of the backend service. Different data structures may be employed to implement service registration lists, such as lists, collections, hash tables, etc., with the specific choice depending on the requirements and technology stack used. Specifically, a data structure is first created, which includes relevant fields in the network configuration information, such as a registration service identifier, a service address identifier, and a registration address identifier. Next, a data structure of a service registration list is created in the system for storing service registration information. Suitable data structures, such as lists, sets or hash tables, may be selected according to actual needs. And then registering service information, namely creating a service registration information object when new service needs to be registered, adding the service registration information object into a service registration list, and ensuring that the service registration identification is unique in the list. The specific service registration information can be queried and acquired by registering the service identification and the registration address identification in the service registration information as required. If the network configuration of the service changes, the corresponding service registration information may be updated.
Step S130, receiving service request information sent by a client, wherein the service request information comprises a client address identifier and a service request identifier.
In step S130, the service request information sent by the client needs to be received, so as to obtain the address identifier of the client and the service request identifier therein. The client address identification refers to the address identification of the client that initiated the service request. It may be the IP address of the client, hostname or other identifier that uniquely identifies the client. The client address identification helps identify the source of the request for subsequent processing and response. The service request identification is used to identify the specific service requested. The service request identifier is typically a string or symbol that uniquely identifies a service or function in the system. It may be a service name, API endpoint, or other identifier that can uniquely identify a service request. The present embodiment can determine the processing method of the service request by matching the client address identifier and the service request identifier with the information in the service registration list. It will be appreciated that for a service request sent by a given IP address, it needs to be forwarded to the server of the given IP address, whereas for a general service request that is not specified, the gateway will forward the general service request to the appropriate server for operation (e.g., sending the service request to a server with more available resources) according to the originally configured request allocation policy.
Step S140, under the condition that the target service registration information is matched from the service registration list according to the client address identification and the service request identification, the service request information is sent to a target back-end server corresponding to the service address identification in the target service registration information so as to be forwarded by the target back-end server, and the registration address identification and the registration service identification in the target service registration information are respectively matched with the client address identification and the service request identification.
In step S140, the service request information sent from the client needs to be matched with the information stored in the service registration list, so as to determine whether the service request information needs to be forwarded to the designated server. When the service request information sent by the client can be matched with the corresponding result in the service registration list, the service request information is the service information which is registered in advance and is required to be used for debugging, and therefore the service request information needs to be forwarded to the corresponding designated server. Specifically, service request information is obtained in step 130, and a client address identifier and a service request identifier therein are extracted. Then, the client address identifier and the service request identifier need to be matched with the registration address identifier and the registration request identifier recorded in the service registration list respectively, when the registration address identifier and the registration request identifier in the same service registration information in the server registration list are the same, the service request information is indicated to belong to the service request for specific test, the service registration information is confirmed as target service registration information, and the service address identifier recorded in the target service registration information can be defined as target service address identifier correspondingly. And then, forwarding the service request information sent by the client to a back-end server corresponding to the target service address identification so as to be debugged by a user.
The service request forwarding method includes the steps of obtaining network configuration information, wherein the network configuration information comprises at least one piece of service registration information, each piece of service registration information comprises a corresponding service address identifier, a registered service identifier and a plurality of registered address identifiers, the registered service identifiers are used for representing corresponding back-end services, the service address identifiers are used for identifying corresponding back-end service running equipment, storing the service registration information into a service registration list, receiving service request information sent by a client, the service request information comprises the client address identifiers and service request identifiers, and sending the service request information to a target back-end server corresponding to the service address identifiers in the target service registration information under the condition that the service address identifiers are matched with the target service registration information from the service registration list according to the client address identifiers and the service request identifiers so as to enable the target back-end server to forward the service request. The gateway stores the network configuration information to specify the forwarding strategy of the specific service request, and forwards the service request for service debugging sent by the specified client to the specified local back-end server for operation and debugging according to the network configuration information, so that the user can conveniently debug the back-end service, the joint debugging result can be specified to be directly presented on a developed computer, and a developer can conveniently check the debugging result, thereby improving the debugging efficiency.
Referring to fig. 4, fig. 4 is a flowchart of a forwarding method of a service request according to an embodiment of the present application. The following describes the workflow of the present embodiment by taking the example that the network configuration file is obtained from the cloud registration database:
When a user needs to debug, firstly, a client related to the test (namely a client B) and a server C related to the request and operation of the server are recorded according to a preset format and uploaded to a cloud registration database, a gateway periodically actively downloads a network configuration file from the cloud registration database and stores the network configuration file in a database local to the gateway, the network configuration file comprises network configuration information including at least one piece of service registration information, each piece of service registration information comprises a corresponding service address identifier, a registration service identifier and a plurality of registration address identifiers, and the gateway can monitor the change of the network configuration file of the cloud registration database and update the network configuration file when the change occurs. In the test process, a service request corresponding to a back-end service requiring debugging is initiated at a client B of a designated IP, the service request comprises a client address identifier and a service request identifier, after the gateway receives the service request, the gateway compares the identifier information, and when the service request is matched with a corresponding target service address, the service request sent by the client B of the designated IP is forwarded to a target back-end server corresponding to the target service address. For a general service request generated by a client A and a client C which are not registered in the cloud registration database, the gateway selects a proper server from all servers to forward according to a preset allocation strategy.
It can be understood that referring to fig. 5, fig. 5 is a flow chart of another forwarding method of a service request according to an embodiment of the present application. When the address of the client terminal of the appointed IP is the same as the address of the server of the appointed IP (namely, the client terminal and the server are both on the same equipment), after the equipment sends out the service request, the gateway returns the service request to the local server for operation, so that the user can conveniently perform local debugging operation.
Correspondingly, acquiring the network configuration information comprises acquiring the network configuration information from the cloud registration database according to a preset time interval.
In this embodiment, the network configuration information is stored in a cloud registration database, and the cloud registration database is set on the server. When the network configuration information needs to be acquired, a server where the cloud registration database is located is accessed, and corresponding data are extracted. The cloud registration database may be a zookeeper. Specifically, network configuration information including service registration information is saved on the zookeeper. The Spring Cloud Gateway gateway service can acquire the network configuration information on the zookeeper and store the information on the local memory for access at any time. For the network configuration information, the network configuration information of the cloud registration database may be acquired at regular time according to a preset time interval, so as to update the local network configuration information. Or when the cloud registration database generates an update event, generating and sending a corresponding update instruction to the gateway, and accessing the data of the cloud registration database by the gateway according to the update instruction so as to update the local data. By the embodiment, the network configuration information on the gateway can be updated in real time, so that a user can conveniently debug a new back-end service.
In another alternative embodiment, the target service registration information is matched to by:
Matching the address identifier of the client and the service request identifier with the registration address identifier and the registration request identifier recorded in the service registration list respectively;
And when the registration address identification and the registration request identification in the same service registration information in the server registration list are corresponding to the same, confirming the service registration information as target service registration information.
In this embodiment, the service request information sent by the client needs to be matched with the information stored in the service registration list, so as to determine whether the service request information needs to be forwarded to the designated server. When the client address identifier is the same as the registration address identifier and the service request type identifier is the same as the registration request type identifier, the service address identifier recorded in the service registration information is confirmed to be used as the target service address identifier. Specifically, a client address identifier and a service request identifier are acquired, a service registration list is traversed, and registration service information is matched piece by piece. For each piece of service registration information, the client address identification is matched with the registration address identification. If the matching is successful, the service request identification and the registration request identification are continuously matched. And if the service request identification is successfully matched, confirming that the service address identification recorded in the service registration information is the target service address identification. It can be understood that the sequence of the identifier matching does not affect the effect of this embodiment, and the client address identifier and the registration address identifier may be matched first, or the service request identifier and the registration request identifier may be matched first, or both may be performed simultaneously, which is not limited specifically in this embodiment.
Through the matching process, the correct target service address identification can be determined, so that the service request information can be sent to the corresponding target back-end server for further processing and forwarding. Thus, the request can be ensured to be correctly routed to the target service, and the personalized debugging requirement of the user is realized.
As an optional embodiment, the forwarding method of the service request further includes:
Matching the address identifier of the client and the service request identifier with the registration address identifier and the registration request identifier recorded in the service registration list respectively;
When at least one of the registration address identification and the registration request identification in the same service registration information in the server registration list is different, request failure information is generated;
And returning the request failure information to the client.
In this embodiment, the service request information sent by the client needs to be matched with the information stored in the service registration list, so as to determine whether the service request information needs to be forwarded to the designated server. When the address identifier of the client is the same as the registration address identifier and the service request type identifier is different from the registration request type identifier, the service request information is not registered in the service registration list, and the service request information belongs to a general service request. When the zookeeper is operated, the default user needs to perform debugging operation, so that the general service request is distributed to a proper server to operate according to a distribution strategy preset by the gateway, and the gateway generates request failure information to remind the user that the service request is not registered and cannot be sent to a server of a designated IP to operate and debug.
It will be appreciated that the request failure information may be returned not only to the client but also to the message processing server, which is configured to receive various request response information, and the user may view all the request responses in a unified manner on the message processing server.
As an optional embodiment, after sending the service request information to the target backend server corresponding to the service address identifier in the target service registration information, the method further includes:
And receiving a forwarding result returned by the target back-end server and sending the forwarding result to the target client.
In the development process of the back-end service software, in order to meet the requirement of joint debugging with the front-end developer, after the service request is forwarded to the designated server, when the user completes debugging at the designated server, the gateway acquires the debugging result and forwards the debugging result to the front-end client as a forwarding result, so that the front-end developer can further debug the front-end according to the debugging result of the back-end developer.
In this embodiment, the forwarding result returned by the target backend server needs to be forwarded to the corresponding target client to perform front-end debugging. Specifically, the gateway receives a forwarding result returned by the target back-end server, wherein the result comprises service request information and debugging result information of the back-end server. And then, according to the service request information in the forwarding result, matching the corresponding forwarding client identification in the service registration list. The forwarding client identification may be used to determine to which target client the forwarding result is sent. And then, the forwarding result is sent to the target client corresponding to the forwarding client identifier. This may be accomplished by an appropriate communication protocol or messaging mechanism to ensure that the forwarding result reaches the target client. Through these steps, the forwarding result of the target backend server can be sent to the correct target client. Finding out a corresponding forwarding client identifier according to service request information in the forwarding result, and sending the result to a target client corresponding to the identifier. Thus, the client can obtain the data of the back-end service or the debugging result of the back-end service, and perform subsequent processing and debugging.
As a specific service request generation method, service request information is generated by a front-end debugging program on a client. Front-end debuggers, i.e., the front-end software to be debugged during development, may include, but are not limited to WebStorm, VSCode and Postman as test tools. When a user needs to debug a certain back-end service, a debugging program on a client of a designated IP can be controlled to generate a corresponding service request so as to debug.
Fig. 6 is a schematic structural diagram of a forwarding device for service requests according to an embodiment of the present application. Referring to fig. 5, the forwarding apparatus of the service request includes an information acquisition module 210, an information storage module 220, a service receiving module 230, and a service forwarding module 240.
The information obtaining module 210 is configured to obtain network configuration information, where the network configuration information includes at least one piece of service registration information, each piece of service registration information includes a corresponding service address identifier, a registered service identifier, and a plurality of registered address identifiers, the registered service identifier is used to characterize a corresponding backend service, the service address identifier is used to identify an operation device of the corresponding backend service, the information saving module 220 is configured to save the service registration information to a service registration list, the service receiving module 230 is configured to receive service request information sent by a client, the service request information includes a client address identifier and a service request identifier, and the service forwarding module 240 is configured to send the service request information to a target backend server corresponding to the service address identifier in the target service registration information when the target service registration information is matched from the service registration list according to the client address identifier and the service request identifier, so that the target backend server can be debugged, and the registered address identifier and the registered service identifier in the target service registration information are respectively matched with the client address identifier and the service request identifier.
On the basis of the embodiment, the configuration information is stored in a cloud registration database;
An information acquisition module comprising:
The information acquisition unit is used for acquiring network configuration information from the cloud registration database according to the preset time interval.
On the basis of the above embodiment, the service forwarding module includes:
The identification matching unit is used for matching the client address identification and the service request identification with the registration address identification and the registration request identification recorded in the service registration list respectively;
And the identification confirmation unit is used for confirming the service address identification recorded in the service registration information as the target service address identification when the registration address identification and the registration request identification in the same service registration information in the server registration list are corresponding to the same.
On the basis of the foregoing embodiment, the forwarding apparatus for a service request further includes:
The identification matching module is used for matching the client address identification and the service request identification with the registration address identification and the registration request identification recorded in the service registration list respectively;
the failure information module is used for generating request failure information when at least one of the registration address identifier and the registration request identifier in the same service registration information in the server registration list is different;
And the information return module is used for returning the request failure information to the client.
On the basis of the foregoing embodiment, the forwarding apparatus for a service request further includes:
and the result forwarding module is used for receiving the forwarding result returned by the target back-end server and sending the forwarding result to the target client.
On the basis of the above embodiment, the service request information is generated by the front-end debugger on the client.
The forwarding device for service requests provided by the embodiment of the invention is contained in the electronic equipment, can be used for executing any service request forwarding method provided by the embodiment, and has corresponding functions and beneficial effects.
It should be noted that, in the embodiment of the forwarding device for service request, each unit and module included are only divided according to the functional logic, but not limited to the above division, as long as the corresponding functions can be implemented, and the specific names of the functional units are only for convenience of distinguishing each other, and are not used for limiting the protection scope of the present invention.
Fig. 7 is a schematic structural diagram of an electronic device according to an embodiment of the present application. As shown in fig. 7, the electronic device includes a processor 310 and a memory 320, and may further include an input device 330, an output device 340, and a communication device 350 in a common product form, where the number of processors 310 in the electronic device may be one or more, and one processor 310 is illustrated in fig. 7, and the processor 310, the memory 320, the input device 330, the output device 340, and the communication device 350 in the electronic device may be connected by a bus or other manners, and illustrated in fig. 7 by a bus connection.
The memory 320 is a computer readable storage medium, and may be used to store a software program, a computer executable program, and a module, such as program instructions/modules corresponding to a service request forwarding method in an embodiment of the present application (for example, the information acquisition module 210, the information storage module 220, the service receiving module 230, and the service forwarding module 240 in a service request forwarding device). The processor 310 executes various functional applications of the electronic device and data processing, i.e., implements the above-described forwarding method of service requests, by running software programs, instructions, and modules stored in the memory 320.
The memory 320 may mainly include a storage program area that may store an operating system, application programs required for at least one function, and a storage data area that may store data created according to the use of the electronic device, etc. In addition, memory 320 may include high-speed random access memory, and may also include non-volatile memory, such as at least one magnetic disk storage device, flash memory device, or other non-volatile solid-state storage device. In some examples, memory 320 may further include memory located remotely from processor 310, which may be connected to the electronic device via a network. Examples of such networks include, but are not limited to, the internet, intranets, local area networks, mobile communication networks, and combinations thereof.
The input device 330 may be used to receive network configuration information. The output device 340 may include a display device such as a display screen.
The electronic equipment comprises the forwarding device of the service request, can be used for executing the forwarding method of any service request, and has corresponding functions and beneficial effects.
The embodiment of the application also provides a computer readable storage medium, on which a computer program is stored, which when executed by an electronic device, implements the relevant operations in the forwarding method of the service request provided in any embodiment of the application, and has corresponding functions and beneficial effects.
It will be appreciated by those skilled in the art that embodiments of the present application may be provided as a method, system, or computer program product.
Accordingly, the present application may take the form of an entirely hardware embodiment, an entirely software embodiment or an embodiment combining software and hardware aspects. Furthermore, the present application may take the form of a computer program product embodied on one or more computer-usable storage media (including, but not limited to, disk storage, CD-ROM, optical storage, and the like) having computer-usable program code embodied therein. The present application is described with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems) and computer program products according to embodiments of the application. It will be understood that each flow and/or block of the flowchart illustrations and/or block diagrams, and combinations of flows and/or blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer program instructions. These computer program instructions may be provided to a processor of a general purpose computer, special purpose computer, embedded processor, or other programmable data processing apparatus to produce a machine, such that the instructions, which execute via the processor of the computer or other programmable data processing apparatus, create means for implementing the functions specified in the flowchart flow or flows and/or block diagram block or blocks. These computer program instructions may also be stored in a computer-readable memory that can direct a computer or other programmable data processing apparatus to function in a particular manner, such that the instructions stored in the computer-readable memory produce an article of manufacture including instruction means which implement the function specified in the flowchart flow or flows and/or block diagram block or blocks. These computer program instructions may also be loaded onto a computer or other programmable data processing apparatus to cause a series of operational steps to be performed on the computer or other programmable apparatus to produce a computer implemented process such that the instructions which execute on the computer or other programmable apparatus provide steps for implementing the functions specified in the flowchart flow or flows and/or block diagram block or blocks.
In one typical configuration, a computing device includes one or more processors (CPUs), input/output interfaces, network interfaces, and memory. The memory may include volatile memory in a computer-readable medium, random Access Memory (RAM) and/or nonvolatile memory, etc., such as Read Only Memory (ROM) or flash RAM. Memory is an example of a computer-readable medium.
Computer readable media, including both non-transitory and non-transitory, removable and non-removable media, may implement information storage by any method or technology. The information may be computer readable instructions, data structures, modules of a program, or other data. Examples of storage media for a computer include, but are not limited to, phase change memory (PRAM), static Random Access Memory (SRAM), dynamic Random Access Memory (DRAM), other types of Random Access Memory (RAM), read Only Memory (ROM), electrically Erasable Programmable Read Only Memory (EEPROM), flash memory or other memory technology, compact disc read only memory (CD-ROM), digital Versatile Disks (DVD) or other optical storage, magnetic cassettes, magnetic disk storage or other magnetic storage devices, or any other non-transmission medium which can be used to store information that can be accessed by a computing device. Computer-readable media, as defined herein, does not include transitory computer-readable media (transmission media), such as modulated data signals and carrier waves.
It should also be noted that the terms "comprises," "comprising," or any other variation thereof, are intended to cover a non-exclusive inclusion, such that a process, method, article, or apparatus that comprises a list of elements does not include only those elements but may include other elements not expressly listed or inherent to such process, method, article, or apparatus. Without further limitation, an element defined by the phrase "comprising one does not exclude the presence of other like elements in a process, method, article, or apparatus that comprises an element.
Note that the above is only a preferred embodiment of the present application and the technical principle applied. It will be understood by those skilled in the art that the present application is not limited to the particular embodiments described herein, but is capable of various obvious changes, rearrangements and substitutions as will now become apparent to those skilled in the art without departing from the scope of the application. Therefore, while the application has been described in connection with the above embodiments, the application is not limited to the embodiments, but may be embodied in many other equivalent forms without departing from the spirit or scope of the application, which is set forth in the following claims.