Is it possible to set the name of dynamic ports? - biztalk

Is there some way to set the name of dynamic ports?
e.g. trying the SendMail SDK sample and I've got a send port with the name ...
SendMail_1.0.0.0_Microsoft.Samples.BizTalk.SendMail.ReceiveSend_DynamicSendPort_2718f63506c1b197
Or if not set it, at least some way to control the naming convention?

You can change the name in BizTalk administrator, but it will get overwritten each time you Deploy.
No, there is no way to influence the auto-named Ports.

If you use an automated process for deployment, somtheng like the deployment framework for biztalk, you can add some extra work with powershell to delete auto generated dynamic port and recreate it with the good name.

Related

How to test different versions of backend services on Kubernetes?

I have a frontend instance (Angular app on nginx), which proxies calls to backend under a specific domain (let's say backend-app). Everything's easy when there is only one instance of both backend and frontend - I name the Service backend-app and DNS resolves to the correct backend Deployment.
Let's say I have another version of backend which I would like to test before merging to master. As nginx configuration of frontend instance is hardcoded to proxy to backend-api, creating another Service under the same name for a newer version of backend doesn't work.
I considered these options:
Making an environment variable and substituting domain name in nginx proxy configuration during runtime. This way I could be flexible about where do I want to route frontend calls to. Cons of this solution, as far as I have investigated, is that this approach beats the purpose of self-containment, that is, it becomes ambiguous what is the frontend's backend client and this type of configuration is prone to errors.
Creating different namespace every time I want to test things. While this allows spinning the whole stack without any problem or conflict, it seems to me that it's a huge overhead to create namespaces just for testing something once.
Having some fancy configurations combining labels and selectors. I couldn't think or find how to do it.
Any other opinions/suggestions you might have?
Try this approach
add label name:backend-1 to backend1 pod
add label name:backend-2 to backend2 pod
create a service using backend-1 selector.
to test against other backend, say backend2, all you have to do is edit the service yaml file and update the selector. you can toggle this way to test between backend1 and backend2
Are you using open shift. If yes then you can divide load between services by percentage using route.
Check blue/green and canary deployment options for more details

Dynamic NameResolver that the load balancer will honor?

So I am working on a gRPC based remoting framework and I have created my own service registry that my services registers in when they come up. Of course I would like the client to lookup the server from the using a custom NameResolver.
So this is working now but since I want to change the service registry at runtime (for example to support rolling upgrades), I would like the NameResolver to keep checking and when a change occurs I want it to update the registry by doing onUpdate. The question is, can I do this and will the gRPC framework honor the update?
So my understading is that the load balancer checks the list of ResolvedServerInfo so it knows what to load balance between. But from that point I am unclear how this is intendent to work. Does it check each time and is it allowed to keep updating the NameResolver. Listener?
I hope this is the case since it is a crucial part of the service discovery I am trying to implement.
Thanks
Magnus
NameResolver is designed to get push based updates rather than polling for changes in addresses. In order to accomplish what you want, you'll need to set up a timer to periodically refresh names in your customer name resolver.

Is there a way to change the MONGO_URL in code?

I'm searching for a way to change the way Meteor loads the Mongo database. Right now, I know I can set an environment variable when I launch Meteor (or export it), but I was hoping there was a way to do this in code. This way, I could dynamically connect to different instances based on conditions.
An example test case would be for the code to parse the url 'testxx.site.com' and then look up a URL based on the 'textxx' subdomain and then connect to that particular instance.
I've tried setting the process.env.MONGO_URL in the server code, but when things execute on the client, it's not picking up the new values.
Any help would be greatly appreciated.
Meteor connects to Mongo right when it starts (using this code), so any changes to process.env.MONGO_URL won't affect the database connection.
It sounds like you are trying to run one Meteor server on several domains and have it connect to several databases at the same time depending on the client's request. This might be possible with traditional server-side scripting languages, but it's not possible with Meteor because the server and database are pretty tightly tied together, and the server basically attaches to one main database when it starts up.
The *.meteor.com hosting is doing something similar to this right now, and in the future Meteor's Galaxy commercial product will allow you to do this - all by starting up separate Meteor servers per subdomain.

How to find the Port ID in Biztalk 2010?

I have configured a receiving port named it "SalesOrder" It contains a receiving location of File Type.
Now when i use this receiving port in a Send port i define a filter like this :
BTS.ReceivePortName==SalesOrder
I start the ports and it works just fine.
Now question is if i want to us the filter like this :
BTS.ReceivePortID=="Where do i get the Port ID"
How can i find the PortID in Biztalk 2010.
There isn't an easy way of getting to the ReceivePortID. The id will also change when creating, deleting, setting up new port and of course as you move you configuration between environments. It's much more common practice to set up these kind of filter based on ReceivePortName instead as this (hopefully) doesn't change as much.
Best practice in my opinion is however to not use these kind of filters that are tied to the configuration but to rather set up filters based on message types and order other promoted properties. Using promoted properties over configuration will also create a more flexible and more loosely coupled solution.

Determining the set of message destinations at runtime in BizTalk application

I’m a complete newbie at BizTalk and I need to create a BizTalk 2006 application which broadcasts messages in a specific way. I’m not asking for a complete solution, but for advise and guidelines, which capabilities of BizTalk I should use.
There’s a message source, for simplicity, say, a directory where the user adds files to publish them. There are several subscribers, each having a directory to receive published files. The number of subscribers can vary in the course of exploitation of the program. There are also some rules which determine if a particular subscriber needs to receive a particular file, based on the filename. For example, each subscriber has a pattern or mask of filename which files they receives must match. Those rules (for example, patterns) can change in time as well.
I don’t know how to do this. Create a set of send ports at runtime, each for each destination? Is it possible? Use one port changing its binding? Would it work correctly with concurrent sendings? Are there other ways?
EDIT
I realized my question may be to obscure and general to prefer one answer over another to accept. So I just upvoted them.
You could look at using dynamic send ports to achieve this - if your subscribers are truly dynamic. This introduces a bit of complexity since you'll need to use an orchestration to configure the send port's properties based on your rules.
If you can, try and remove the complexity. If you know that you don't need to be truly dynamic when adding subscribers (i.e. a subscriber and it's rules can be configured one time only) and you have a manageable number of subscribers then I would suggest configuring each subscriber using it's own send port and use a filter to create subscriptions based on message context properties. The beauty of this approach is that you don't need to create and deploy an orchestration and this becomes a highly performant and scalable solution.
If the changes to the destination are going to be frequent, you are right in seeking a more dynamic solution. One nice solution is using dynamic send ports and the Business Rules Engine. You create rule set for the messages you are receving. This could be based on a destination property or customer ID in the message. Using these facts, the rules engine can return a bunch of information like file mask, server name, ip address of deleiver server, etc. You can thenuse this information to configure the dynamic send in the orchestration. The real nice thing here is that you can update the rule set in the rules engine without redeploying the whole solution. As a newb, these are some advanced concepts, but not as diificult as you may think.
For a simpler solution, you might want to look at setting the FILE Send adapters properties via it's Propery Schema (ie. File name, Directory, etc.). You could pull these values from a database with a helper class inside an expresison shape. On each message ogig out, use the property shcema to set where the message will be sent and named. This way, you just update the database as things change.
Good Luck!

Resources