I would say this:
"I noticed that a port is getting blocked by RSTP even though there is no loop in the network." => if stp blocked a port, I believe there was a loop someplace, one you are probably not aware of
"I found RSTP just run one instance of STP" => yes this is how it is designed to work
"I enabled the VSTP on VLAN 999 ports and it solved my problem." => what problem? That a port was blocked, and adding VSTP to config "solved" this? Does not make much sense.
VSTP implementation is there to interoperate with PVSTP/PVSTP+, which are both Cisco proprietary implementations of STP. If you are running this, then I would assume you have some connection to some Cisco product running some form of STP. Now if Cisco is actually configured for R-PVSTP+ (again proprietary) then on Juniper side you need to configure both RSTP and VSTP to properly interoperate, as well as making VLAN 1 be untagged and the associated as the native-vlan-id.
BEST SOLUTION - design your network such that no form of STP is required. This has been the networking best design of choice since 2010, . . .
You did request a response - As well it is near impossible to figure out any STP operation without a diagram, with physical port names and connections. This would be for almost all devices within that STP domain. A network can have several different STP domains, or one can make their network even more complex by adding in MSTP to the design. If Cisco is involved, often Cisco chooses to be the Root even when configured to not be - word of warning.