Skip to content

Commit

Permalink
Added exclusive queue example
Browse files Browse the repository at this point in the history
  • Loading branch information
bczoma committed Feb 9, 2024
1 parent 64fed7c commit 6d51a3b
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 5 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ The following table shows the resources created for each `endpoint-type` value.
Refer to the following configuration examples:

- Queue
- Exclusive queue
- [Exclusive queue](examples/exclusive-queue)
- [Non-exclusive queue](examples/non-exclusive-queue)
- Partitioned queue
- Queue with topic subscriptions
Expand Down
51 changes: 51 additions & 0 deletions examples/exclusive-queue/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Exclusive Queue Example

Configuration in this directory creates an [exclusive queue](https://docs.solace.com/Messaging/Guaranteed-Msg/Configuring-Queues.htm#Configuring_Access_Types_..49) on the PubSub+ event broker leveraging the Queue Endpoint Terraform module.

## Module Configuration in the Example

### Mandatory Inputs

* `msg_vpn_name` - set to `default` in the example
* `endpoint_type` - set to `queue`
* `endpoint_name` - set to `testQ` in the example
* `permission` - set to `consume` to enable the receiver app to remove consumed messages from the queue

### Optional Inputs

Optional module input variables have the same name and defaults if omitted, as the attributes of the underlying provider resource. Refer to the [documentation of "solacebroker_msg_vpn_queue"](https://registry.terraform.io/providers/SolaceProducts/solacebroker/latest/docs/resources/msg_vpn_queue#optional).

The `access_type` module input variable defines if a queue is "exclusive" or "non-exclusive". The default is "exclusive", so the variable doesn't need to be strictly specified.

### Output

The module `queue` output refers to the created queue.

## Running the Example

### Access to a PubSub+ broker

If you don't already have access to a broker, refer to the [Developers page](https://www.solace.dev/) for options to get started.

### Adjust Provider Configuration

Adjust the [provider parameters](https://registry.terraform.io/providers/SolaceProducts/solacebroker/latest/docs#schema) in `main.tf` according to your broker. The example configuration shows settings for a local broker running in Docker.

### Create the resource

Hint: You can verify configuration changes on the broker, before and after, using the [PubSub+ Broker Manager Web UI](https://docs.solace.com/Admin/Broker-Manager/PubSub-Manager-Overview.htm)

Execute from this folder:

```bash
$ terraform init
$ terraform plan
$ terraform apply
```

Run `terraform destroy` to clean up created resources when no longer needed.

## Additional Documentation

Refer to the [Configuring Queues](https://docs.solace.com/Messaging/Guaranteed-Msg/Configuring-Queues.htm#Configuring_Queues) section in the PubSub+ documentation.

30 changes: 30 additions & 0 deletions examples/exclusive-queue/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
provider solacebroker {
username = "admin"
password = "admin"
url = "http://localhost:8080"
}

module "exclusive_queue" {
# update with the module location
source = "../.."

msg_vpn_name = "default"
endpoint_type = "queue"
endpoint_name = "testEQ"

# permission "consume" enables messaging a messaging client to connect, read and consume messages to/from the queue
permission = "consume"

# access_type "exclusive" is the default queue access type. While it has been specified here for clarity, it is not strictly required.
access_type = "exclusive"

# ingress and egress are enabled by default in the module, no need to enable here
# ingress_enabled = true
# egress_enabled = true
}

output "provisioned_queue" {
value = module.exclusive_queue.queue
description = "The provisioned queue resource"
}

9 changes: 9 additions & 0 deletions examples/exclusive-queue/providers.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Terraform configuration

terraform {
required_providers {
solacebroker = {
source = "registry.terraform.io/solaceproducts/solacebroker"
}
}
}
2 changes: 1 addition & 1 deletion examples/non-exclusive-queue/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Configuration in this directory creates a [non-exclusive queue](https://docs.sol

Optional module input variables have the same name and defaults if omitted, as the attributes of the underlying provider resource. Refer to the [documentation of "solacebroker_msg_vpn_queue"](https://registry.terraform.io/providers/SolaceProducts/solacebroker/latest/docs/resources/msg_vpn_queue#optional).

The `access_type` module input variable defines if a queue is "exclusive" or "non-exclusive". The default is "non-exclusive", so the variable doesn't need to be strictly specified.
The `access_type` module input variable defines if a queue is "exclusive" or "non-exclusive". This needs to be specified for a "non-exclusive" queue.

### Output

Expand Down
6 changes: 3 additions & 3 deletions examples/non-exclusive-queue/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ module "non_exclusive_queue" {

msg_vpn_name = "default"
endpoint_type = "queue"
endpoint_name = "testQ"
endpoint_name = "testNEQ"

# permission "consume" enables messaging a messaging client to connect, read and consume messages to/from the queue
permission = "consume"

# access_type "non-exclusive" is the default queue access type, no need to specify here
# access_type = "non-exclusive"
# access_type "exclusive" is the default queue access type. This variable needs to be specified here to configure a non-exclusive queue
access_type = "non-exclusive"

# ingress and egress are enabled by default in the module, no need to enable here
# ingress_enabled = true
Expand Down

0 comments on commit 6d51a3b

Please sign in to comment.