The HTTP/2 stream id is 31-bits long meaning you can have 2^32 - 1 stream ids of which the odd ones are for the client initiated and even for the server initiated. This is 2,147,483,647 messages that can be sent before the stream ids are exhausted.
Are you really sending over 2 billion (US not UK billion!) messages several times a day that would mean you reach this limit? If so I am not sure HTTP is the best protocol for you and you may be best sticking with web sockets. HTTP adds overheads with HTTP headers that mean it’s not optimal for small, frequent messages.
Anyway to answer your question, the HTTP/2 spec has the following to say:
Stream identifiers cannot be reused. Long-lived connections can result in an endpoint exhausting the available range of stream identifiers. A client that is unable to establish a new stream identifier can establish a new connection for new streams. A server that is unable to establish a new stream identifier can send a GOAWAY frame so that the client is forced to open a new connection for new streams.
So basically you have to code the client and server to handle this and the client should automatically start a new stream when it is unable to increment the stream id. That is not to say it should tear down the old connection until all in flight messages have been answered - there may be two connections in progress for a period of tome. If this is not possible then I would suggest either the client or server proactively closes the connection in advance as the limit approaches, and new messages are queued until the connection is closed out and then a new message is established.